library(biomonitoR)
library(vegan)
library(ade4)
library(dplyr)
library(StatMatch)
library(ggplot2)
library(tidyr)
library(tidyverse)

1 Data inspection

benthos_data <- read.csv("Benthos_final_updatedfile.csv")
summary(benthos_data)
##   Time.point          Channel            Position          Treatment        
##  Length:64          Length:64          Length:64          Length:64         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     Gammarus       Chironomidae       Baetidae      Ephemerellidae  
##  Min.   :  0.00   Min.   : 143.0   Min.   :  0.00   Min.   : 0.000  
##  1st Qu.:  7.75   1st Qu.: 591.2   1st Qu.:  0.00   1st Qu.: 0.000  
##  Median : 34.00   Median :1003.0   Median :  6.00   Median : 0.000  
##  Mean   :110.58   Mean   :1234.5   Mean   : 18.06   Mean   : 2.859  
##  3rd Qu.:170.75   3rd Qu.:1625.8   3rd Qu.: 20.25   3rd Qu.: 3.250  
##  Max.   :607.00   Max.   :4042.0   Max.   :203.00   Max.   :21.000  
##  Heptageniidae    Leptophlebiidae      Caenidae Hydropsychidae   
##  Min.   :0.0000   Min.   :0.00000   Min.   :0   Min.   :0.00000  
##  1st Qu.:0.0000   1st Qu.:0.00000   1st Qu.:0   1st Qu.:0.00000  
##  Median :0.0000   Median :0.00000   Median :0   Median :0.00000  
##  Mean   :0.1406   Mean   :0.01562   Mean   :0   Mean   :0.01562  
##  3rd Qu.:0.0000   3rd Qu.:0.00000   3rd Qu.:0   3rd Qu.:0.00000  
##  Max.   :2.0000   Max.   :1.00000   Max.   :0   Max.   :1.00000  
##  Rhyacophilidae    Limnephilidae Philopotamidae Polycentropodidae
##  Min.   :0.00000   Min.   :0     Min.   :0      Min.   :0        
##  1st Qu.:0.00000   1st Qu.:0     1st Qu.:0      1st Qu.:0        
##  Median :0.00000   Median :0     Median :0      Median :0        
##  Mean   :0.01562   Mean   :0     Mean   :0      Mean   :0        
##  3rd Qu.:0.00000   3rd Qu.:0     3rd Qu.:0      3rd Qu.:0        
##  Max.   :1.00000   Max.   :0     Max.   :0      Max.   :0        
##    Simuliidae       Tipulidae        Limoniidae         Dixidae       
##  Min.   :0.0000   Min.   : 0.000   Min.   : 0.0000   Min.   :0.00000  
##  1st Qu.:0.0000   1st Qu.: 0.000   1st Qu.: 0.0000   1st Qu.:0.00000  
##  Median :0.0000   Median : 0.000   Median : 0.0000   Median :0.00000  
##  Mean   :0.2344   Mean   : 1.484   Mean   : 0.8594   Mean   :0.04688  
##  3rd Qu.:0.0000   3rd Qu.: 0.000   3rd Qu.: 0.0000   3rd Qu.:0.00000  
##  Max.   :6.0000   Max.   :47.000   Max.   :25.0000   Max.   :1.00000  
##    Culicidae       Ceratopogonidae   Psychodidae      Empididae      
##  Min.   :0.00000   Min.   : 0.000   Min.   : 0.00   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.: 0.000   1st Qu.: 0.00   1st Qu.:0.00000  
##  Median :0.00000   Median : 0.000   Median : 0.00   Median :0.00000  
##  Mean   :0.01562   Mean   : 1.219   Mean   : 0.25   Mean   :0.03125  
##  3rd Qu.:0.00000   3rd Qu.: 0.000   3rd Qu.: 0.00   3rd Qu.:0.00000  
##  Max.   :1.00000   Max.   :15.000   Max.   :11.00   Max.   :1.00000  
##    Ephydridae        Pediciidae          Elmis           Limnius       
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.0000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.0000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.00000   Median :0.0000   Median :0.00000  
##  Mean   :0.07812   Mean   :0.09375   Mean   :0.1562   Mean   :0.04688  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.0000   3rd Qu.:0.00000  
##  Max.   :4.00000   Max.   :3.00000   Max.   :2.0000   Max.   :1.00000  
##   Hydraenidae      Chrysomelidae      Oligochaeta    
##  Min.   :0.00000   Min.   :0.00000   Min.   :  0.00  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:  0.00  
##  Median :0.00000   Median :0.00000   Median : 10.50  
##  Mean   :0.03125   Mean   :0.01562   Mean   : 39.55  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.: 71.25  
##  Max.   :1.00000   Max.   :1.00000   Max.   :240.00
colnames(benthos_data)
##  [1] "Time.point"        "Channel"           "Position"         
##  [4] "Treatment"         "Gammarus"          "Chironomidae"     
##  [7] "Baetidae"          "Ephemerellidae"    "Heptageniidae"    
## [10] "Leptophlebiidae"   "Caenidae"          "Hydropsychidae"   
## [13] "Rhyacophilidae"    "Limnephilidae"     "Philopotamidae"   
## [16] "Polycentropodidae" "Simuliidae"        "Tipulidae"        
## [19] "Limoniidae"        "Dixidae"           "Culicidae"        
## [22] "Ceratopogonidae"   "Psychodidae"       "Empididae"        
## [25] "Ephydridae"        "Pediciidae"        "Elmis"            
## [28] "Limnius"           "Hydraenidae"       "Chrysomelidae"    
## [31] "Oligochaeta"
# Restructure the data table by transforming it into a longer format, where each row corresponds to a specific Taxa name.

longer_format_taxa <- benthos_data %>%
  pivot_longer(cols = starts_with(c("Gammarus", "Chironomidae", "Baetidae", "Ephemerellidae", "Heptageniidae", "Leptophlebiidae", "Caenidae", "Hydropsychidae", "Rhyacophilidae", "Limnephilidae", "Philopotamidae", "Polycentropodidae", "Simuliidae", "Tipulidae", "Limoniidae", "Dixidae", "Culicidae", "Ceratopogonidae", "Psychodidae", "Empididae", "Ephydridae", "Pediciidae", "Elmis", "Limnius", "Hydraenidae", "Chrysomelidae", "Oligochaeta")),
               names_to = "Taxa",
               values_to = "Abundance")
glimpse(longer_format_taxa)
## Rows: 1,728
## Columns: 6
## $ Time.point <chr> "week -1", "week -1", "week -1", "week -1", "week -1", "wee…
## $ Channel    <chr> "Channel1", "Channel1", "Channel1", "Channel1", "Channel1",…
## $ Position   <chr> "upstream", "upstream", "upstream", "upstream", "upstream",…
## $ Treatment  <chr> "crayfish + ALAN", "crayfish + ALAN", "crayfish + ALAN", "c…
## $ Taxa       <chr> "Gammarus", "Chironomidae", "Baetidae", "Ephemerellidae", "…
## $ Abundance  <int> 129, 1618, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1,…
# Rename the factors for each factor of Time Point and Position variables
longer_format_taxa$Time.point <- ifelse(longer_format_taxa$Time.point == "week -1", "Week-1",
                         ifelse(longer_format_taxa$Time.point == "week_6", "Week_6", NA))
longer_format_taxa$Position <- ifelse(longer_format_taxa$Position == "downstream", "Downstream",
                         ifelse(longer_format_taxa$Position == "upstream", "Upstream", NA))

1.1 Primary data visualization

ggplot(data = longer_format_taxa, aes(x = Treatment, y = Abundance, group = Time.point)) +
    geom_line()+
    geom_smooth(method = "glm", method.args = c("poisson"), se = TRUE)
## `geom_smooth()` using formula = 'y ~ x'

library(plotly)
library(ggplot2)

longer_format_taxa %>%
  plot_ly(x = ~Treatment, y = ~log(Abundance) + 1, color = ~Time.point,
          boxpoints = "all", boxmean = TRUE, notched = FALSE, showlegend = TRUE,
          marker = list(color = 'rgb(7,40)'),
              line = list(color = 'rgb(7,40)')) %>%
  add_boxplot() %>%
  layout(boxmode = "group",
         xaxis = list(title = "Treatments", zeroline = FALSE, showgrid = FALSE),
         yaxis = list(title = "Total abundance for all species (log-transformed)", zeroline = FALSE),
         title = "Macroinvertebrate abundance before-after treatment (log-transformed)")
longer_format_taxa %>%
  plot_ly(x = ~Treatment, y = ~log(Abundance) + 1, color = ~Position,
          boxpoints = "all", boxmean = TRUE, notched = FALSE, showlegend = TRUE,
          marker = list(color = 'rgb(7,40)'),
              line = list(color = 'rgb(7,40)')) %>%
  add_boxplot() %>%
  layout(boxmode = "group",
         xaxis = list(title = "Treatments", zeroline = FALSE, showgrid = FALSE),
         yaxis = list(title = "Total abundance for all species (log-transformed)", zeroline = FALSE),
         title = "Macroinvertebrate abundance in upstream and downstream (log-transformed)")
library(ggthemes)

longer_format_taxa$Abun_sd = sd(longer_format_taxa$Abundance)

g1<- ggplot(longer_format_taxa, aes(fill = Time.point, y = Abundance, x = Treatment)) +
  geom_bar(position = "dodge", stat = "identity")  +
 scale_fill_grey(start = 0.75, end = 0.25)  + 
  theme_minimal() +
  labs(title = "Species abundance comparison in between before and after treatment",
       x = "Treatment",
       y = "Species Abundance")
g1 + theme(legend.position="top")

g2<- ggplot(longer_format_taxa, aes(fill = Position, y = Abundance, x = Treatment)) +
  geom_bar(position = "dodge", stat = "identity")  +
 scale_fill_grey(start = 0.75, end = 0.25)  + 
  theme_minimal() +
  labs(title = "Species abundance comparison in between upstream and downstream",
       x = "Treatment",
       y = "Species Abundance")
g2 + theme(legend.position="top")

# Create a boxplot of treatment against abundance for before treatment
p1 <- longer_format_taxa %>%
   filter(Time.point == "Week-1") %>%
   plot_ly(x = ~Treatment, y = ~log(Abundance) + 1, color = ~Treatment, boxpoints = "all", boxmean = TRUE, notched = FALSE, showlegend = FALSE) %>% 
   add_boxplot() %>% 
   layout(yaxis = list(title = "Abundance before treatment", zeroline = FALSE))
 

# Create a boxplot of treatment against abundance for after treatment
p2 <- longer_format_taxa %>%
   filter(Time.point == "Week_6") %>%
   plot_ly(x = ~Treatment, y = ~log(Abundance) + 1, color = ~Treatment, boxpoints = "all", boxmean = TRUE, notched = FALSE, showlegend = FALSE) %>% 
   add_boxplot()%>% 
   layout(yaxis = list(title = "Abundance after treatment", zeroline = FALSE))
         
# Create a facted scatterplot containing p1 and p2
subplot(p1, p2, nrows = 2, shareX = TRUE, shareY = TRUE) %>%
   layout(xaxis = list(title = "Treatments", zeroline = FALSE, showgrid = FALSE),
         title = "Macroinvertebrate abundance (log-transformed) before-after treatment")

2 Evaluating the effects of crayfish and ALAN on macroinvertebrates trait

2.1 Restructure our dataset on the basis of channel

# Restructure the longer_format_taxa table by transforming it into a wider format, where each row corresponds to a specific treatment name.

Final_data <- longer_format_taxa %>%
 pivot_wider(names_from = Channel, values_from = Abundance)
glimpse(Final_data)
## Rows: 432
## Columns: 21
## $ Time.point <chr> "Week-1", "Week-1", "Week-1", "Week-1", "Week-1", "Week-1",…
## $ Position   <chr> "Upstream", "Upstream", "Upstream", "Upstream", "Upstream",…
## $ Treatment  <chr> "crayfish + ALAN", "crayfish + ALAN", "crayfish + ALAN", "c…
## $ Taxa       <chr> "Gammarus", "Chironomidae", "Baetidae", "Ephemerellidae", "…
## $ Abun_sd    <dbl> 291.0232, 291.0232, 291.0232, 291.0232, 291.0232, 291.0232,…
## $ Channel1   <int> 129, 1618, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1,…
## $ Channel2   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel3   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel4   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel5   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel6   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel7   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel8   <int> 166, 276, 49, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0…
## $ Channel9   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel10  <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel11  <int> 276, 1649, 21, 10, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 5…
## $ Channel12  <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel13  <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel14  <int> 147, 2775, 56, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1,…
## $ Channel15  <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ Channel16  <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
# Omitting NA values in our dataset
Final_data[is.na(Final_data)] <- 0
Final_data[1:6, 1:6]
Time.point Position Treatment Taxa Abun_sd Channel1
Week-1 Upstream crayfish + ALAN Gammarus 291.0232 129
Week-1 Upstream crayfish + ALAN Chironomidae 291.0232 1618
Week-1 Upstream crayfish + ALAN Baetidae 291.0232 9
Week-1 Upstream crayfish + ALAN Ephemerellidae 291.0232 11
Week-1 Upstream crayfish + ALAN Heptageniidae 291.0232 0
Week-1 Upstream crayfish + ALAN Leptophlebiidae 291.0232 0

2.2 Total abundance of each speciees in each channel

# Calculating total abundance of each species for each channel 
total_abundance_by_channel <- Final_data %>%
  group_by(Taxa) %>%
  transmute(Taxa, Treatment, Time.point, Position,
    Channel_1 = sum(Channel1),
    Channel_2 = sum(Channel2),
    Channel_3 = sum(Channel3),
    Channel_4 = sum(Channel4),
    Channel_5 = sum(Channel5),
    Channel_6 = sum(Channel6),
    Channel_7 = sum(Channel7),
    Channel_8 = sum(Channel8),
    Channel_9 = sum(Channel9),
    Channel_10 = sum(Channel10),
    Channel_11 = sum(Channel11),
    Channel_12 = sum(Channel12),
    Channel_13 = sum(Channel13),
    Channel_14 = sum(Channel14),
    Channel_15 = sum(Channel15),
    Channel_16 = sum(Channel16)
  )
total_abundance_by_channel[1:6, 1:6]
Taxa Treatment Time.point Position Channel_1 Channel_2
Gammarus crayfish + ALAN Week-1 Upstream 271 742
Chironomidae crayfish + ALAN Week-1 Upstream 3588 3662
Baetidae crayfish + ALAN Week-1 Upstream 19 69
Ephemerellidae crayfish + ALAN Week-1 Upstream 11 12
Heptageniidae crayfish + ALAN Week-1 Upstream 0 1
Leptophlebiidae crayfish + ALAN Week-1 Upstream 0 0
# Calculating row sums for each channel
row_sums <- rowSums(total_abundance_by_channel[, c(5:20)])

# Subset the dataset to remove rows with zero row sums
Final_data_NZ <- total_abundance_by_channel[row_sums != 0, ]

Final_data_NZ[1:6, 1:6]
Taxa Treatment Time.point Position Channel_1 Channel_2
Gammarus crayfish + ALAN Week-1 Upstream 271 742
Chironomidae crayfish + ALAN Week-1 Upstream 3588 3662
Baetidae crayfish + ALAN Week-1 Upstream 19 69
Ephemerellidae crayfish + ALAN Week-1 Upstream 11 12
Heptageniidae crayfish + ALAN Week-1 Upstream 0 1
Leptophlebiidae crayfish + ALAN Week-1 Upstream 0 0
datafortraitgen <- Final_data_NZ[, c(1, 5:20)]
datafortraitgen[1:6, 1:6]
Taxa Channel_1 Channel_2 Channel_3 Channel_4 Channel_5
Gammarus 271 742 226 208 243
Chironomidae 3588 3662 6061 5438 3561
Baetidae 19 69 60 37 214
Ephemerellidae 11 12 18 9 23
Heptageniidae 0 1 0 0 2
Leptophlebiidae 0 0 0 0 1

2.3 Trait Analysis

# Applying as_biomonitor function to our species abundance data,  
# this function will merge our dataset with the reference taxonomic dataset.
# I select group = "mi" which means that as_biomonitor function will merge our datset
# with the reference macroinvertebrate taxonomic dataset

biomonitor_data <- as_biomonitor(datafortraitgen, group = "mi", traceB = TRUE)
glimpse(biomonitor_data)
## List of 1
##  $ taxa_db:'data.frame': 23 obs. of  27 variables:
##   ..$ Phylum    : chr [1:23] "Arthropoda" "Arthropoda" "Arthropoda" "Arthropoda" ...
##   ..$ Class     : chr [1:23] "Insecta" "Insecta" "Insecta" "Insecta" ...
##   ..$ Subclass  : chr [1:23] "" "" "" "" ...
##   ..$ Order     : chr [1:23] "Ephemeroptera" "Diptera" "Diptera" "Coleoptera" ...
##   ..$ Family    : chr [1:23] "Baetidae" "Ceratopogonidae" "Chironomidae" "Chrysomelidae" ...
##   ..$ Subfamily : chr [1:23] "" "" "" "" ...
##   ..$ Tribus    : chr [1:23] "" "" "" "" ...
##   ..$ Genus     : chr [1:23] "" "" "" "" ...
##   ..$ Species   : chr [1:23] "" "" "" "" ...
##   ..$ Subspecies: chr [1:23] "" "" "" "" ...
##   ..$ Taxa      : chr [1:23] "Baetidae" "Ceratopogonidae" "Chironomidae" "Chrysomelidae" ...
##   ..$ Channel_1 : int [1:23] 304 16 57408 0 0 0 16 0 176 0 ...
##   ..$ Channel_2 : int [1:23] 1104 0 58592 0 0 0 0 16 192 64 ...
##   ..$ Channel_3 : int [1:23] 960 32 96976 0 0 0 0 0 288 0 ...
##   ..$ Channel_4 : int [1:23] 592 144 87008 0 0 0 16 0 144 0 ...
##   ..$ Channel_5 : int [1:23] 3424 0 56976 0 0 0 0 0 368 0 ...
##   ..$ Channel_6 : int [1:23] 416 240 79936 0 0 0 0 0 80 0 ...
##   ..$ Channel_7 : int [1:23] 496 0 82112 0 0 0 0 0 224 0 ...
##   ..$ Channel_8 : int [1:23] 1664 0 24576 0 0 16 16 0 512 0 ...
##   ..$ Channel_9 : int [1:23] 512 64 88720 0 0 16 16 0 48 0 ...
##   ..$ Channel_10: int [1:23] 352 0 106304 0 0 0 0 0 128 0 ...
##   ..$ Channel_11: int [1:23] 704 80 69968 0 0 0 16 0 176 0 ...
##   ..$ Channel_12: int [1:23] 336 128 106160 0 0 0 32 0 64 0 ...
##   ..$ Channel_13: int [1:23] 720 160 73056 0 0 16 32 0 32 0 ...
##   ..$ Channel_14: int [1:23] 1872 16 105680 16 16 0 16 16 80 0 ...
##   ..$ Channel_15: int [1:23] 2304 240 63504 0 0 0 0 0 80 0 ...
##   ..$ Channel_16: int [1:23] 2736 128 107136 0 0 0 0 0 336 16 ...
##  - attr(*, "class")= chr "asb"

2.3.1 Summary plot of macroinvertebrate community

Pie-chart-1: Overall structure of macroinvertebrate community. Abundance data are reported at Family level.

plot(biomonitor_data, parent = "Order", child = "Family")

Pie-chart-2: Species abundance (log transformed) distribution of macroinvertebrate community. Abundance data are reported at Family level.

plot(biomonitor_data, parent = "Order", child = "Family", type = "abundance", trans = log1p)

Pie-chart-3: Frequency plot (the number of samples in which a taxon have been found over the total number of samples) for macroinvertebrate community

plot(biomonitor_data, parent = "Order", child = "Family", type = "frequency")

2.3.2 Aggregate Taxa

taxa_aggregation <- aggregate_taxa(biomonitor_data)
#glimpse(taxa_aggregation)

Structure of macroinvertebrate community. For each observation (n = 64) the relative abundance is reported. Observations were ordered using an agglomerative hierarchical clustering with the Ward.D2 method to enhance pattern detection based on community similarity.

plot(taxa_aggregation)

2.3.3 Indicator taxa analysis

cluster <- as.data.frame(names(datafortraitgen[-1]))
cluster
names(datafortraitgen[-1])
Channel_1
Channel_2
Channel_3
Channel_4
Channel_5
Channel_6
Channel_7
Channel_8
Channel_9
Channel_10
Channel_11
Channel_12
Channel_13
Channel_14
Channel_15
Channel_16
cluster$cluster <- c("crayfish + ALAN","crayfish", "ALAN" ,"control" , "crayfish" , "ALAN" , 
                     "control",  "crayfish + ALAN" , "ALAN" , "control", "crayfish + ALAN" ,"crayfish", 
                     "control" ,"crayfish + ALAN" ,"crayfish", "ALAN")

names(cluster) <- c("sites","clusters")

Fig-1: Indicator taxa for macroinvertebrate community in each treatment sites (Control, crayfish, ALAN, ALAN+Crayfish).

plot_indicator_taxa(taxa_aggregation, cluster=cluster,thresh = 16, opacity = 0.1,parent = "Order")
# Create the taxonomic tree.
#tax_tree <- ref_from_tree(tax_inf$taxonomy) 
#tax_tree

2.3.4 Assign Trait

traitscailing_data <- assign_traits( taxa_aggregation, tax_lev = "Family" )
glimpse(traitscailing_data)
## Rows: 70
## Columns: 118
## $ Taxa               <chr> "Baetidae", "Baetidae", "Baetidae", "Baetidae", "Ba…
## $ Taxa_db            <chr> "Family", "Family", "Family", "Family", "Family", "…
## $ Traits_taxlev      <chr> "Acentrella sinaica", "Baetis", "Baetopus tenellus"…
## $ Traits_real        <chr> "Species", "Genus", "Species", "Species", "Genus", …
## $ Taxonomic_distance <int> 4, 3, 4, 4, 3, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 1, 3, …
## $ LONGITUDINAL_1     <dbl> 0.00000000, 0.14285714, 0.00000000, 0.07692308, 0.0…
## $ LONGITUDINAL_2     <dbl> 0.28571429, 0.19047619, 0.00000000, 0.15384615, 0.0…
## $ LONGITUDINAL_3     <dbl> 0.42857143, 0.19047619, 0.14285714, 0.15384615, 0.1…
## $ LONGITUDINAL_4     <dbl> 0.28571429, 0.19047619, 0.42857143, 0.30769231, 0.1…
## $ LONGITUDINAL_5     <dbl> 0.00000000, 0.14285714, 0.42857143, 0.15384615, 0.1…
## $ LONGITUDINAL_6     <dbl> 0.0000000, 0.0952381, 0.0000000, 0.0000000, 0.15789…
## $ LONGITUDINAL_7     <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.0…
## $ LONGITUDINAL_8     <dbl> 0.00000000, 0.04761905, 0.00000000, 0.15384615, 0.2…
## $ TRANSVERSAL_1      <dbl> 1.00000000, 0.44444444, 0.50000000, 0.00000000, 0.0…
## $ TRANSVERSAL_2      <dbl> 0.00000000, 0.33333333, 0.50000000, 0.50000000, 0.2…
## $ TRANSVERSAL_3      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.1666667, 0.28571…
## $ TRANSVERSAL_4      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ TRANSVERSAL_5      <dbl> 0.0000000, 0.1111111, 0.0000000, 0.0000000, 0.28571…
## $ TRANSVERSAL_6      <dbl> 0.0000000, 0.1111111, 0.0000000, 0.3333333, 0.21428…
## $ TRANSVERSAL_7      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ ALTITUDE_1         <dbl> 0.7500000, 0.5000000, 1.0000000, 0.7500000, 0.60000…
## $ ALTITUDE_2         <dbl> 0.2500000, 0.3333333, 0.0000000, 0.2500000, 0.40000…
## $ ALTITUDE_3         <dbl> 0.0000000, 0.1666667, 0.0000000, 0.0000000, 0.00000…
## $ SUBSTRATE_1        <dbl> 1.00000000, 0.25000000, 0.50000000, 0.08333333, 0.0…
## $ SUBSTRATE_2        <dbl> 0.00000000, 0.12500000, 0.33333333, 0.16666667, 0.0…
## $ SUBSTRATE_3        <dbl> 0.00000000, 0.06250000, 0.00000000, 0.08333333, 0.0…
## $ SUBSTRATE_4        <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.0…
## $ SUBSTRATE_5        <dbl> 0.0000000, 0.3125000, 0.1666667, 0.4166667, 0.45454…
## $ SUBSTRATE_6        <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.0…
## $ SUBSTRATE_7        <dbl> 0.00000000, 0.18750000, 0.00000000, 0.08333333, 0.0…
## $ SUBSTRATE_8        <dbl> 0.00000000, 0.06250000, 0.00000000, 0.16666667, 0.1…
## $ SUBSTRATE_9        <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.0…
## $ CURRENT_1          <dbl> 0.0000000, 0.0000000, 0.0000000, 0.2500000, 0.75000…
## $ CURRENT_2          <dbl> 0.0000000, 0.2857143, 0.0000000, 0.5000000, 0.25000…
## $ CURRENT_3          <dbl> 1.0000000, 0.4285714, 0.6666667, 0.2500000, 0.00000…
## $ CURRENT_4          <dbl> 0.0000000, 0.2857143, 0.3333333, 0.0000000, 0.00000…
## $ TEMPERATURE_1      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ TEMPERATURE_2      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.25000…
## $ TEMPERATURE_3      <dbl> 1.0000000, 1.0000000, 1.0000000, 1.0000000, 0.75000…
## $ PH_1               <dbl> 0.00000000, 0.09090909, 0.00000000, 0.00000000, 0.0…
## $ PH_2               <dbl> 0.00000000, 0.09090909, 0.00000000, 0.00000000, 0.1…
## $ PH_3               <dbl> 0.00000000, 0.09090909, 0.00000000, 0.16666667, 0.1…
## $ PH_4               <dbl> 0.0000000, 0.1818182, 0.0000000, 0.1666667, 0.20000…
## $ PH_5               <dbl> 0.0000000, 0.2727273, 0.2500000, 0.1666667, 0.30000…
## $ PH_6               <dbl> 1.0000000, 0.2727273, 0.7500000, 0.5000000, 0.30000…
## $ SALINITY_1         <dbl> 1.00, 0.75, 1.00, 1.00, 0.60, 1.00, 1.00, 0.60, 0.5…
## $ SALINITY_2         <dbl> 0.00, 0.25, 0.00, 0.00, 0.40, 0.00, 0.00, 0.40, 0.5…
## $ SAPROBITY_1        <dbl> 0.2000000, 0.1428571, 0.0000000, 0.0000000, 0.00000…
## $ SAPROBITY_2        <dbl> 0.6000000, 0.2857143, 0.0000000, 0.2000000, 0.00000…
## $ SAPROBITY_3        <dbl> 0.2000000, 0.4285714, 0.7500000, 0.6000000, 0.60000…
## $ SAPROBITY_4        <dbl> 0.0000000, 0.1428571, 0.2500000, 0.2000000, 0.40000…
## $ SAPROBITY_5        <dbl> 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.…
## $ TROPHIC_1          <dbl> 1.0000000, 0.3333333, 0.0000000, 0.4000000, 0.00000…
## $ TROPHIC_2          <dbl> 0.0000000, 0.3333333, 0.6000000, 0.6000000, 0.50000…
## $ TROPHIC_3          <dbl> 0.0000000, 0.3333333, 0.4000000, 0.0000000, 0.50000…
## $ FOOD_1             <dbl> 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.…
## $ FOOD_2             <dbl> 0.2857143, 0.1818182, 0.0000000, 0.4000000, 0.33333…
## $ FOOD_3             <dbl> 0.14285714, 0.18181818, 0.00000000, 0.00000000, 0.1…
## $ FOOD_4             <dbl> 0.42857143, 0.45454545, 0.00000000, 0.60000000, 0.3…
## $ FOOD_5             <dbl> 0.14285714, 0.09090909, 0.00000000, 0.00000000, 0.1…
## $ FOOD_6             <dbl> 0.00000000, 0.09090909, 0.00000000, 0.00000000, 0.0…
## $ FOOD_7             <dbl> 0.00000000, 0.00000000, 0.16666667, 0.00000000, 0.1…
## $ FOOD_8             <dbl> 0.00000000, 0.00000000, 0.83333333, 0.00000000, 0.0…
## $ FOOD_9             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FEEDING_1          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FEEDING_2          <dbl> 0.2500000, 0.2500000, 0.0000000, 0.4000000, 0.42857…
## $ FEEDING_3          <dbl> 0.0000000, 0.0000000, 0.5000000, 0.0000000, 0.14285…
## $ FEEDING_4          <dbl> 0.7500000, 0.7500000, 0.0000000, 0.6000000, 0.42857…
## $ FEEDING_5          <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ FEEDING_6          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FEEDING_7          <dbl> 0.0000000, 0.0000000, 0.5000000, 0.0000000, 0.00000…
## $ FEEDING_8          <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_1       <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_2       <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_3       <dbl> 0.2000000, 0.3750000, 0.7500000, 0.6000000, 0.75000…
## $ LOCOMOTION_4       <dbl> 0.8000000, 0.5000000, 0.2500000, 0.2000000, 0.25000…
## $ LOCOMOTION_5       <dbl> 0.0000000, 0.0000000, 0.0000000, 0.2000000, 0.00000…
## $ LOCOMOTION_6       <dbl> 0.0000000, 0.1250000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_7       <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_8       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESPIRATION_1      <dbl> 0.3333333, 0.3333333, 0.3333333, 0.3333333, 0.33333…
## $ RESPIRATION_2      <dbl> 0.6666667, 0.6666667, 0.6666667, 0.6666667, 0.66666…
## $ RESPIRATION_3      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ RESPIRATION_4      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ RESPIRATION_5      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ SIZE_1             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ SIZE_2             <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ SIZE_3             <dbl> 1.0000000, 0.7500000, 1.0000000, 1.0000000, 1.00000…
## $ SIZE_4             <dbl> 0.0000000, 0.2500000, 0.0000000, 0.0000000, 0.00000…
## $ SIZE_5             <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ SIZE_6             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ SIZE_7             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESISTANCE_1       <dbl> 0.00, 0.50, 0.00, 0.25, 0.00, 1.00, 1.00, 0.25, 0.0…
## $ RESISTANCE_2       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, …
## $ RESISTANCE_3       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESISTANCE_4       <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0…
## $ RESISTANCE_5       <dbl> 1.00, 0.50, 1.00, 0.75, 1.00, 0.00, 0.00, 0.75, 1.0…
## $ DISPERSAL_1        <dbl> 0.3333333, 0.3333333, 0.3750000, 0.2857143, 0.16666…
## $ DISPERSAL_2        <dbl> 0.1666667, 0.2222222, 0.2500000, 0.2857143, 0.33333…
## $ DISPERSAL_3        <dbl> 0.1666667, 0.1111111, 0.1250000, 0.1428571, 0.16666…
## $ DISPERSAL_4        <dbl> 0.3333333, 0.3333333, 0.2500000, 0.2857143, 0.33333…
## $ STAGES_1           <dbl> 0.5000000, 0.5000000, 0.5000000, 0.5000000, 0.50000…
## $ STAGES_2           <dbl> 0.5000000, 0.5000000, 0.5000000, 0.5000000, 0.50000…
## $ STAGES_3           <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ STAGES_4           <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LIFESPAN_1         <dbl> 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.0…
## $ LIFESPAN_2         <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0…
## $ VOLTINISM_1        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ VOLTINISM_2        <dbl> 1.0000000, 0.4000000, 1.0000000, 0.0000000, 0.25000…
## $ VOLTINISM_3        <dbl> 0.0000000, 0.6000000, 0.0000000, 1.0000000, 0.75000…
## $ REPRODUCTION_1     <dbl> 0.0, 0.0, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.2, 0…
## $ REPRODUCTION_2     <dbl> 0.00, 0.00, 0.00, 0.00, 0.20, 0.00, 0.00, 0.00, 0.0…
## $ REPRODUCTION_3     <dbl> 0.00, 0.25, 0.00, 1.00, 0.20, 1.00, 1.00, 0.00, 0.0…
## $ REPRODUCTION_4     <dbl> 1.00, 0.75, 1.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.0…
## $ REPRODUCTION_5     <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0…
## $ REPRODUCTION_6     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ REPRODUCTION_7     <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0…
## $ REPRODUCTION_8     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
traitscailing_data_cwm <- traitscailing_data[, c(1, 65:85, 93:101, 108:118)]
glimpse(traitscailing_data_cwm) # Taking original trait data from Tachet dataset
## Rows: 70
## Columns: 42
## $ Taxa           <chr> "Baetidae", "Baetidae", "Baetidae", "Baetidae", "Baetid…
## $ FEEDING_1      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_2      <dbl> 0.2500000, 0.2500000, 0.0000000, 0.4000000, 0.4285714, …
## $ FEEDING_3      <dbl> 0.0000000, 0.0000000, 0.5000000, 0.0000000, 0.1428571, …
## $ FEEDING_4      <dbl> 0.7500000, 0.7500000, 0.0000000, 0.6000000, 0.4285714, …
## $ FEEDING_5      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ FEEDING_6      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_7      <dbl> 0.0000000, 0.0000000, 0.5000000, 0.0000000, 0.0000000, …
## $ FEEDING_8      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_1   <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_2   <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_3   <dbl> 0.2000000, 0.3750000, 0.7500000, 0.6000000, 0.7500000, …
## $ LOCOMOTION_4   <dbl> 0.8000000, 0.5000000, 0.2500000, 0.2000000, 0.2500000, …
## $ LOCOMOTION_5   <dbl> 0.0000000, 0.0000000, 0.0000000, 0.2000000, 0.0000000, …
## $ LOCOMOTION_6   <dbl> 0.0000000, 0.1250000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_7   <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_8   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESPIRATION_1  <dbl> 0.3333333, 0.3333333, 0.3333333, 0.3333333, 0.3333333, …
## $ RESPIRATION_2  <dbl> 0.6666667, 0.6666667, 0.6666667, 0.6666667, 0.6666667, …
## $ RESPIRATION_3  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ RESPIRATION_4  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ RESPIRATION_5  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_1   <dbl> 0.00, 0.50, 0.00, 0.25, 0.00, 1.00, 1.00, 0.25, 0.00, 0…
## $ RESISTANCE_2   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1…
## $ RESISTANCE_3   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_4   <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0…
## $ RESISTANCE_5   <dbl> 1.00, 0.50, 1.00, 0.75, 1.00, 0.00, 0.00, 0.75, 1.00, 0…
## $ DISPERSAL_1    <dbl> 0.3333333, 0.3333333, 0.3750000, 0.2857143, 0.1666667, …
## $ DISPERSAL_2    <dbl> 0.1666667, 0.2222222, 0.2500000, 0.2857143, 0.3333333, …
## $ DISPERSAL_3    <dbl> 0.1666667, 0.1111111, 0.1250000, 0.1428571, 0.1666667, …
## $ DISPERSAL_4    <dbl> 0.3333333, 0.3333333, 0.2500000, 0.2857143, 0.3333333, …
## $ VOLTINISM_1    <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ VOLTINISM_2    <dbl> 1.0000000, 0.4000000, 1.0000000, 0.0000000, 0.2500000, …
## $ VOLTINISM_3    <dbl> 0.0000000, 0.6000000, 0.0000000, 1.0000000, 0.7500000, …
## $ REPRODUCTION_1 <dbl> 0.0, 0.0, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, …
## $ REPRODUCTION_2 <dbl> 0.00, 0.00, 0.00, 0.00, 0.20, 0.00, 0.00, 0.00, 0.00, 0…
## $ REPRODUCTION_3 <dbl> 0.00, 0.25, 0.00, 1.00, 0.20, 1.00, 1.00, 0.00, 0.00, 0…
## $ REPRODUCTION_4 <dbl> 1.00, 0.75, 1.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0…
## $ REPRODUCTION_5 <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0…
## $ REPRODUCTION_6 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ REPRODUCTION_7 <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, …
## $ REPRODUCTION_8 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
traitscailing_data_av <- average_traits(traitscailing_data)
glimpse(traitscailing_data_av)
## Rows: 21
## Columns: 114
## $ Taxa           <fct> Baetidae, Ceratopogonidae, Chironomidae, Chrysomelidae,…
## $ LONGITUDINAL_1 <dbl> 0.03891597, 0.04545455, 0.14234694, 0.00000000, 0.00000…
## $ LONGITUDINAL_2 <dbl> 0.12609546, 0.09090909, 0.15425170, 0.00000000, 0.00000…
## $ LONGITUDINAL_3 <dbl> 0.19030360, 0.09090909, 0.12250567, 0.00000000, 0.05555…
## $ LONGITUDINAL_4 <dbl> 0.30052604, 0.09090909, 0.12250567, 0.05555556, 0.12698…
## $ LONGITUDINAL_5 <dbl> 0.20235754, 0.08333333, 0.11513605, 0.05555556, 0.05555…
## $ LONGITUDINAL_6 <dbl> 0.03616183, 0.08333333, 0.10323129, 0.05555556, 0.00000…
## $ LONGITUDINAL_7 <dbl> 0.007518797, 0.250000000, 0.048894558, 0.000000000, 0.1…
## $ LONGITUDINAL_8 <dbl> 0.09812076, 0.26515152, 0.19112812, 0.83333333, 0.63492…
## $ TRANSVERSAL_1  <dbl> 0.277777778, 0.000000000, 0.007936508, 0.000000000, 0.0…
## $ TRANSVERSAL_2  <dbl> 0.44965986, 0.30555556, 0.35317460, 0.42857143, 0.08391…
## $ TRANSVERSAL_3  <dbl> 0.09319728, 0.29166667, 0.15476190, 0.19047619, 0.24475…
## $ TRANSVERSAL_4  <dbl> 0.00000000, 0.18055556, 0.08531746, 0.19047619, 0.16783…
## $ TRANSVERSAL_5  <dbl> 0.05668934, 0.05555556, 0.13293651, 0.00000000, 0.33566…
## $ TRANSVERSAL_6  <dbl> 0.12267574, 0.16666667, 0.26587302, 0.19047619, 0.16783…
## $ TRANSVERSAL_7  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ ALTITUDE_1     <dbl> 0.7428571, 0.6666667, 0.4265306, 0.8333333, 1.0000000, …
## $ ALTITUDE_2     <dbl> 0.2047619, 0.3333333, 0.3700680, 0.1666667, 0.0000000, …
## $ ALTITUDE_3     <dbl> 0.05238095, 0.00000000, 0.20340136, 0.00000000, 0.00000…
## $ SUBSTRATE_1    <dbl> 0.2748918, 0.0000000, 0.1729692, 0.0000000, 0.0000000, …
## $ SUBSTRATE_2    <dbl> 0.08928571, 0.06944444, 0.09299720, 0.00000000, 0.00000…
## $ SUBSTRATE_3    <dbl> 0.19096320, 0.16666667, 0.10273109, 0.00000000, 0.00000…
## $ SUBSTRATE_4    <dbl> 0.06536797, 0.06944444, 0.05854342, 0.05555556, 0.00000…
## $ SUBSTRATE_5    <dbl> 0.26910173, 0.16666667, 0.31715686, 0.88888889, 0.55000…
## $ SUBSTRATE_6    <dbl> 0.00000000, 0.12500000, 0.04285714, 0.05555556, 0.10000…
## $ SUBSTRATE_7    <dbl> 0.03869048, 0.23611111, 0.04306723, 0.00000000, 0.00000…
## $ SUBSTRATE_8    <dbl> 0.05871212, 0.00000000, 0.07401961, 0.00000000, 0.35000…
## $ SUBSTRATE_9    <dbl> 0.01298701, 0.16666667, 0.09565826, 0.00000000, 0.00000…
## $ CURRENT_1      <dbl> 0.1785714, 0.6250000, 0.2431973, 0.7500000, 0.8000000, …
## $ CURRENT_2      <dbl> 0.3979592, 0.3750000, 0.2479592, 0.2500000, 0.2000000, …
## $ CURRENT_3      <dbl> 0.3350340, 0.0000000, 0.2408163, 0.0000000, 0.0000000, …
## $ CURRENT_4      <dbl> 0.08843537, 0.00000000, 0.26802721, 0.00000000, 0.00000…
## $ TEMPERATURE_1  <dbl> 0.00000000, 0.00000000, 0.46190476, 0.00000000, 0.12500…
## $ TEMPERATURE_2  <dbl> 0.07142857, 0.33333333, 0.09523810, 0.00000000, 0.12500…
## $ TEMPERATURE_3  <dbl> 0.9285714, 0.6666667, 0.4428571, 1.0000000, 0.7500000, …
## $ PH_1           <dbl> 0.01298701, 0.00000000, 0.11255836, 0.00000000, 0.15476…
## $ PH_2           <dbl> 0.02727273, 0.00000000, 0.15177404, 0.00000000, 0.15476…
## $ PH_3           <dbl> 0.06695527, 0.00000000, 0.17558357, 0.00000000, 0.15476…
## $ PH_4           <dbl> 0.1101010, 0.0000000, 0.1866947, 0.0000000, 0.1547619, …
## $ PH_5           <dbl> 0.2246753, 0.0000000, 0.1866947, 0.0000000, 0.1547619, …
## $ PH_6           <dbl> 0.5580087, 1.0000000, 0.1866947, 1.0000000, 0.2261905, …
## $ SALINITY_1     <dbl> 0.9071429, 0.5500000, 0.7785714, 1.0000000, 0.6000000, …
## $ SALINITY_2     <dbl> 0.09285714, 0.45000000, 0.22142857, 0.00000000, 0.40000…
## $ SAPROBITY_1    <dbl> 0.04897959, NA, 0.17913832, NA, 0.00000000, 0.00000000,…
## $ SAPROBITY_2    <dbl> 0.1836735, NA, 0.3374150, NA, 0.1875000, 0.5000000, 0.3…
## $ SAPROBITY_3    <dbl> 0.4969388, NA, 0.2979592, NA, 0.3750000, 0.2500000, 0.5…
## $ SAPROBITY_4    <dbl> 0.27040816, NA, 0.14263039, NA, 0.25000000, 0.25000000,…
## $ SAPROBITY_5    <dbl> 0.00000000, NA, 0.04285714, NA, 0.18750000, 0.00000000,…
## $ TROPHIC_1      <dbl> 0.2476190, 0.2500000, 0.2833333, 0.0000000, 0.1250000, …
## $ TROPHIC_2      <dbl> 0.4833333, 0.5000000, 0.4055556, 0.0000000, 0.5000000, …
## $ TROPHIC_3      <dbl> 0.2690476, 0.2500000, 0.3111111, 1.0000000, 0.3750000, …
## $ FOOD_1         <dbl> 0.00000000, 0.00000000, 0.01785714, 0.00000000, 0.00000…
## $ FOOD_2         <dbl> 0.26679035, 0.00000000, 0.27207792, 0.00000000, 0.33333…
## $ FOOD_3         <dbl> 0.06225521, 0.20833333, 0.03084416, 0.00000000, 0.00000…
## $ FOOD_4         <dbl> 0.44996908, 0.70833333, 0.31753247, 0.16666667, 0.33333…
## $ FOOD_5         <dbl> 0.04926819, 0.08333333, 0.07954545, 0.83333333, 0.00000…
## $ FOOD_6         <dbl> 0.01298701, 0.00000000, 0.01298701, 0.00000000, 0.00000…
## $ FOOD_7         <dbl> 0.03968254, 0.00000000, 0.19123377, 0.00000000, 0.33333…
## $ FOOD_8         <dbl> 0.11904762, 0.00000000, 0.07792208, 0.00000000, 0.00000…
## $ FOOD_9         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_1      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_2      <dbl> 0.2850340, 0.3333333, 0.1678571, 0.0000000, 0.3666667, …
## $ FEEDING_3      <dbl> 0.09183673, 0.25000000, 0.06428571, 0.91666667, 0.00000…
## $ FEEDING_4      <dbl> 0.55170068, 0.41666667, 0.32142857, 0.08333333, 0.18333…
## $ FEEDING_5      <dbl> 0.0000000, 0.0000000, 0.1178571, 0.0000000, 0.0000000, …
## $ FEEDING_6      <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, …
## $ FEEDING_7      <dbl> 0.07142857, 0.00000000, 0.24285714, 0.00000000, 0.45000…
## $ FEEDING_8      <dbl> 0.00000000, 0.00000000, 0.08571429, 0.00000000, 0.00000…
## $ LOCOMOTION_1   <dbl> 0.00000000, 0.00000000, 0.00000000, 0.03333333, 0.00000…
## $ LOCOMOTION_2   <dbl> 0.0000000, 0.1000000, 0.0000000, 0.0000000, 0.9000000, …
## $ LOCOMOTION_3   <dbl> 0.5964286, 0.0000000, 0.1901927, 0.0000000, 0.1000000, …
## $ LOCOMOTION_4   <dbl> 0.3571429, 0.8000000, 0.3503401, 0.1000000, 0.0000000, …
## $ LOCOMOTION_5   <dbl> 0.02857143, 0.10000000, 0.17715420, 0.43333333, 0.00000…
## $ LOCOMOTION_6   <dbl> 0.01785714, 0.00000000, 0.16128118, 0.00000000, 0.00000…
## $ LOCOMOTION_7   <dbl> 0.0000000, 0.0000000, 0.1210317, 0.4333333, 0.0000000, …
## $ LOCOMOTION_8   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESPIRATION_1  <dbl> 0.33333333, 0.00000000, 0.75000000, 0.21428571, 0.00000…
## $ RESPIRATION_2  <dbl> 0.6666667, 1.0000000, 0.2500000, 0.0000000, 0.0000000, …
## $ RESPIRATION_3  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.1428571, 0.0000000, …
## $ RESPIRATION_4  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.6428571, 1.0000000, …
## $ RESPIRATION_5  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ SIZE_1         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ SIZE_2         <dbl> 0.00000000, 0.50000000, 0.16666667, 0.00000000, 0.12500…
## $ SIZE_3         <dbl> 0.9642857, 0.2000000, 0.5809524, 0.0000000, 0.8750000, …
## $ SIZE_4         <dbl> 0.03571429, 0.30000000, 0.20476190, 1.00000000, 0.00000…
## $ SIZE_5         <dbl> 0.00000000, 0.00000000, 0.04761905, 0.00000000, 0.00000…
## $ SIZE_6         <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ SIZE_7         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_1   <dbl> 0.39285714, 0.12500000, 0.00000000, 0.00000000, 0.42500…
## $ RESISTANCE_2   <dbl> 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, NA, 0.0, 0.0, 0.0, 0…
## $ RESISTANCE_3   <dbl> 0, 0, 0, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESISTANCE_4   <dbl> 0.00000000, 0.00000000, 0.07142857, 0.00000000, 0.45000…
## $ RESISTANCE_5   <dbl> 0.6071429, 0.8750000, 0.9285714, 0.0000000, 0.1250000, …
## $ DISPERSAL_1    <dbl> 0.2780612, 0.0000000, 0.3503401, 0.0000000, 0.0000000, …
## $ DISPERSAL_2    <dbl> 0.26814059, 0.00000000, 0.18707483, 0.08333333, 0.00000…
## $ DISPERSAL_3    <dbl> 0.1459751, 0.0000000, 0.2755102, 0.0000000, 0.4000000, …
## $ DISPERSAL_4    <dbl> 0.3078231, 1.0000000, 0.1870748, 0.9166667, 0.6000000, …
## $ STAGES_1       <dbl> 0.50000000, 0.00000000, 0.07142857, 0.31313131, 0.14285…
## $ STAGES_2       <dbl> 0.5000000, 0.6000000, 0.4285714, 0.3131313, 0.4285714, …
## $ STAGES_3       <dbl> 0.0000000, 0.4000000, 0.5000000, 0.3131313, 0.4285714, …
## $ STAGES_4       <dbl> 0.00000000, 0.00000000, 0.00000000, 0.06060606, 0.00000…
## $ LIFESPAN_1     <dbl> 1.0000000, 1.0000000, 1.0000000, 0.2500000, 1.0000000, …
## $ LIFESPAN_2     <dbl> 0.00000000, 0.00000000, 0.00000000, 0.75000000, 0.00000…
## $ VOLTINISM_1    <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000…
## $ VOLTINISM_2    <dbl> 0.4714286, 0.6666667, 0.4166667, 1.0000000, 0.5000000, …
## $ VOLTINISM_3    <dbl> 0.52857143, 0.33333333, 0.58333333, 0.00000000, 0.50000…
## $ REPRODUCTION_1 <dbl> 0.08571429, 0.00000000, 0.05714286, 0.00000000, 0.00000…
## $ REPRODUCTION_2 <dbl> 0.02857143, 0.00000000, 0.00000000, 0.00000000, 0.47500…
## $ REPRODUCTION_3 <dbl> 0.4928571, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ REPRODUCTION_4 <dbl> 0.3928571, 1.0000000, 0.3000000, 1.0000000, 0.0000000, …
## $ REPRODUCTION_5 <dbl> 0.0000000, 0.0000000, 0.4714286, 0.0000000, 0.4250000, …
## $ REPRODUCTION_6 <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ REPRODUCTION_7 <dbl> 0.0000000, 0.0000000, 0.1714286, 0.0000000, 0.1000000, …
## $ REPRODUCTION_8 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
# Selecting our desire trait
trait_av <- traitscailing_data_av[, c(1, 61:81, 89:97, 104:114)]
# Ommittig NA values in our dataset
trait_av[is.na(trait_av)] <- 0
glimpse(trait_av)
## Rows: 21
## Columns: 42
## $ Taxa           <fct> Baetidae, Ceratopogonidae, Chironomidae, Chrysomelidae,…
## $ FEEDING_1      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_2      <dbl> 0.2850340, 0.3333333, 0.1678571, 0.0000000, 0.3666667, …
## $ FEEDING_3      <dbl> 0.09183673, 0.25000000, 0.06428571, 0.91666667, 0.00000…
## $ FEEDING_4      <dbl> 0.55170068, 0.41666667, 0.32142857, 0.08333333, 0.18333…
## $ FEEDING_5      <dbl> 0.0000000, 0.0000000, 0.1178571, 0.0000000, 0.0000000, …
## $ FEEDING_6      <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, …
## $ FEEDING_7      <dbl> 0.07142857, 0.00000000, 0.24285714, 0.00000000, 0.45000…
## $ FEEDING_8      <dbl> 0.00000000, 0.00000000, 0.08571429, 0.00000000, 0.00000…
## $ LOCOMOTION_1   <dbl> 0.00000000, 0.00000000, 0.00000000, 0.03333333, 0.00000…
## $ LOCOMOTION_2   <dbl> 0.0000000, 0.1000000, 0.0000000, 0.0000000, 0.9000000, …
## $ LOCOMOTION_3   <dbl> 0.5964286, 0.0000000, 0.1901927, 0.0000000, 0.1000000, …
## $ LOCOMOTION_4   <dbl> 0.3571429, 0.8000000, 0.3503401, 0.1000000, 0.0000000, …
## $ LOCOMOTION_5   <dbl> 0.02857143, 0.10000000, 0.17715420, 0.43333333, 0.00000…
## $ LOCOMOTION_6   <dbl> 0.01785714, 0.00000000, 0.16128118, 0.00000000, 0.00000…
## $ LOCOMOTION_7   <dbl> 0.0000000, 0.0000000, 0.1210317, 0.4333333, 0.0000000, …
## $ LOCOMOTION_8   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESPIRATION_1  <dbl> 0.33333333, 0.00000000, 0.75000000, 0.21428571, 0.00000…
## $ RESPIRATION_2  <dbl> 0.6666667, 1.0000000, 0.2500000, 0.0000000, 0.0000000, …
## $ RESPIRATION_3  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.1428571, 0.0000000, …
## $ RESPIRATION_4  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.6428571, 1.0000000, …
## $ RESPIRATION_5  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_1   <dbl> 0.39285714, 0.12500000, 0.00000000, 0.00000000, 0.42500…
## $ RESISTANCE_2   <dbl> 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, …
## $ RESISTANCE_3   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_4   <dbl> 0.00000000, 0.00000000, 0.07142857, 0.00000000, 0.45000…
## $ RESISTANCE_5   <dbl> 0.6071429, 0.8750000, 0.9285714, 0.0000000, 0.1250000, …
## $ DISPERSAL_1    <dbl> 0.2780612, 0.0000000, 0.3503401, 0.0000000, 0.0000000, …
## $ DISPERSAL_2    <dbl> 0.26814059, 0.00000000, 0.18707483, 0.08333333, 0.00000…
## $ DISPERSAL_3    <dbl> 0.1459751, 0.0000000, 0.2755102, 0.0000000, 0.4000000, …
## $ DISPERSAL_4    <dbl> 0.3078231, 1.0000000, 0.1870748, 0.9166667, 0.6000000, …
## $ VOLTINISM_1    <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000…
## $ VOLTINISM_2    <dbl> 0.4714286, 0.6666667, 0.4166667, 1.0000000, 0.5000000, …
## $ VOLTINISM_3    <dbl> 0.52857143, 0.33333333, 0.58333333, 0.00000000, 0.50000…
## $ REPRODUCTION_1 <dbl> 0.08571429, 0.00000000, 0.05714286, 0.00000000, 0.00000…
## $ REPRODUCTION_2 <dbl> 0.02857143, 0.00000000, 0.00000000, 0.00000000, 0.47500…
## $ REPRODUCTION_3 <dbl> 0.4928571, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ REPRODUCTION_4 <dbl> 0.3928571, 1.0000000, 0.3000000, 1.0000000, 0.0000000, …
## $ REPRODUCTION_5 <dbl> 0.0000000, 0.0000000, 0.4714286, 0.0000000, 0.4250000, …
## $ REPRODUCTION_6 <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ REPRODUCTION_7 <dbl> 0.0000000, 0.0000000, 0.1714286, 0.0000000, 0.1000000, …
## $ REPRODUCTION_8 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…

2.4 Calculating functioanl indices

library(ade4)
Trait_category_nr <- c(8, 8, 5, 5, 4, 3, 8)

2.4.1 Functional dispersion

Functional_dispersion <- f_disp(taxa_aggregation, trait_db = trait_av,tax_lev = "Taxa", nbdim = 2, type = "F", col_blocks = Trait_category_nr, correction = "cailliez")
Functional_dispersion <- as.data.frame(Functional_dispersion)
Functional_dispersion$Channel <- colnames(datafortraitgen[-1])
glimpse(Functional_dispersion)
## Rows: 16
## Columns: 2
## $ Functional_dispersion <dbl> 0.006243023, 0.019723936, 0.008821815, 0.0071514…
## $ Channel               <chr> "Channel_1", "Channel_2", "Channel_3", "Channel_…

2.4.2 Functional diversity

Functional_diversity <- f_divs(taxa_aggregation, trait_db = trait_av,tax_lev = "Taxa", type = "F", col_blocks = Trait_category_nr, correction = "cailliez")
Functional_diversity <- as.data.frame(Functional_diversity)
Functional_diversity$Channel <- colnames(datafortraitgen[-1])
glimpse(Functional_diversity)
## Rows: 16
## Columns: 2
## $ Functional_diversity <dbl> 0.011245919, 0.034347725, 0.015262110, 0.01286145…
## $ Channel              <chr> "Channel_1", "Channel_2", "Channel_3", "Channel_4…

2.4.3 Functional redundancy

Functional_redundancy <- f_red(taxa_aggregation, trait_db = trait_av,tax_lev = "Taxa", type = "F", col_blocks = Trait_category_nr, correction = "cailliez")
Functional_redundancy <- as.data.frame(Functional_redundancy)
Functional_redundancy$Channel <- colnames(datafortraitgen[-1])
glimpse(Functional_redundancy)
## Rows: 16
## Columns: 4
## $ GS_rich <dbl> 0.018106963, 0.056616106, 0.026731544, 0.021655548, 0.11908897…
## $ raoQ    <dbl> 0.011245919, 0.034347725, 0.015262110, 0.012861450, 0.06221562…
## $ fred    <dbl> 0.006861045, 0.022268382, 0.011469434, 0.008794098, 0.05687335…
## $ Channel <chr> "Channel_1", "Channel_2", "Channel_3", "Channel_4", "Channel_5…

2.4.4 Functional evenness

Functional_evenness <- f_eve(taxa_aggregation, trait_db = trait_av,tax_lev = "Taxa", type = "F", nbdim = 2, col_blocks = Trait_category_nr, correction = "cailliez")
Functional_evenness <- as.data.frame(Functional_evenness)
Functional_evenness$Channel <- colnames(datafortraitgen[-1])
glimpse(Functional_evenness)
## Rows: 16
## Columns: 2
## $ Functional_evenness <dbl> 0.05823722, 0.48179034, 0.25771452, 0.26308118, 0.…
## $ Channel             <chr> "Channel_1", "Channel_2", "Channel_3", "Channel_4"…

2.4.5 Functional richness

Functional_richness <- f_rich(taxa_aggregation, trait_db = trait_av,tax_lev = "Taxa", type = "F", nbdim = 2, col_blocks = Trait_category_nr, correction = "cailliez")
Functional_richness <- as.data.frame(Functional_richness)
Functional_richness$Channel <- colnames(datafortraitgen[-1])
glimpse(Functional_richness)
## Rows: 16
## Columns: 2
## $ Functional_richness <dbl> 0.6870988, 0.7398459, 0.6062340, 0.2745886, 0.0511…
## $ Channel             <chr> "Channel_1", "Channel_2", "Channel_3", "Channel_4"…

2.5 Community-Weighted Mean values of traits

CWM <- cwm(taxa_aggregation, trait_db = traitscailing_data_cwm, tax_lev = "Taxa", trans = log1p, traceB = FALSE)
CWM <- as.data.frame(CWM)
CWM$Channel <- colnames(datafortraitgen[-1])
glimpse(CWM)
## Rows: 16
## Columns: 43
## $ Sample         <fct> Channel_1, Channel_2, Channel_3, Channel_4, Channel_5, …
## $ DISPERSAL_1    <dbl> 13.00621, 11.21873, 12.83903, 12.46311, 13.21801, 11.77…
## $ DISPERSAL_2    <dbl> 8.699224, 7.535902, 8.733227, 8.604821, 9.046327, 8.086…
## $ DISPERSAL_3    <dbl> 9.212926, 7.508421, 8.997461, 8.817095, 8.819065, 8.403…
## $ DISPERSAL_4    <dbl> 9.429021, 8.653073, 9.523294, 9.431208, 10.652957, 8.86…
## $ FEEDING_1      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
## $ FEEDING_2      <dbl> 8.528899, 7.267593, 8.609850, 8.452645, 9.340748, 7.895…
## $ FEEDING_3      <dbl> 3.139462, 2.920037, 3.146090, 3.223180, 4.659874, 3.023…
## $ FEEDING_4      <dbl> 16.03635, 14.87081, 16.21349, 15.66468, 17.54458, 14.67…
## $ FEEDING_5      <dbl> 3.140994, 2.420018, 2.989760, 2.831539, 2.382008, 2.834…
## $ FEEDING_6      <dbl> 0.000000000, 0.002138003, 0.000000000, 0.000000000, 0.0…
## $ FEEDING_7      <dbl> 7.301734, 5.780286, 7.053478, 7.084888, 6.076780, 6.732…
## $ FEEDING_8      <dbl> 2.199936, 1.655245, 2.080345, 2.059301, 1.732369, 1.970…
## $ LOCOMOTION_1   <dbl> 0.00000000, 0.05597069, 0.00000000, 0.00000000, 0.00000…
## $ LOCOMOTION_2   <dbl> 0.015477558, 0.008836926, 0.017237980, 0.024518988, 0.0…
## $ LOCOMOTION_3   <dbl> 12.97859, 11.49248, 13.37938, 12.70578, 13.58667, 11.77…
## $ LOCOMOTION_4   <dbl> 14.79710, 13.64609, 14.72169, 14.35246, 17.57215, 13.50…
## $ LOCOMOTION_5   <dbl> 4.960587, 3.833422, 4.740402, 5.210003, 4.238335, 4.988…
## $ LOCOMOTION_6   <dbl> 4.400795, 3.437964, 4.198269, 4.115660, 3.893032, 3.951…
## $ LOCOMOTION_7   <dbl> 3.194835, 2.441358, 3.036027, 2.907809, 2.446170, 2.877…
## $ LOCOMOTION_8   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
## $ REPRODUCTION_1 <dbl> 2.615043, 2.162567, 2.631234, 2.528952, 2.442492, 2.366…
## $ REPRODUCTION_2 <dbl> 0.5503579, 0.9617238, 0.5779499, 0.8610446, 1.4139132, …
## $ REPRODUCTION_3 <dbl> 7.303257, 7.528945, 7.846347, 7.254331, 11.420291, 6.57…
## $ REPRODUCTION_4 <dbl> 13.19553, 11.17070, 13.24299, 12.99503, 13.35240, 12.30…
## $ REPRODUCTION_5 <dbl> 12.125445, 9.130582, 11.479359, 11.447937, 9.528032, 10…
## $ REPRODUCTION_6 <dbl> 0.12724552, 0.10416113, 0.12571111, 0.11033545, 0.11450…
## $ REPRODUCTION_7 <dbl> 4.430505, 3.857446, 4.189421, 4.118602, 3.464739, 3.973…
## $ REPRODUCTION_8 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
## $ RESISTANCE_1   <dbl> 5.837491, 5.910621, 6.282364, 5.743128, 7.816458, 5.294…
## $ RESISTANCE_2   <dbl> 0.009673474, 0.009966403, 0.000000000, 0.000000000, 0.0…
## $ RESISTANCE_3   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
## $ RESISTANCE_4   <dbl> 2.069725, 1.966066, 1.976950, 1.854003, 2.194346, 1.842…
## $ RESISTANCE_5   <dbl> 32.43049, 26.91338, 31.83370, 31.71910, 31.72556, 29.98…
## $ RESPIRATION_1  <dbl> 24.05176, 19.37877, 23.37940, 22.78254, 21.79139, 21.67…
## $ RESPIRATION_2  <dbl> 16.25278, 14.97498, 16.65921, 15.86389, 19.94497, 14.76…
## $ RESPIRATION_3  <dbl> 0.00000000, 0.18283758, 0.00000000, 0.00000000, 0.00000…
## $ RESPIRATION_4  <dbl> 0.04283967, 0.37953541, 0.05439840, 0.66980409, 0.00000…
## $ RESPIRATION_5  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
## $ VOLTINISM_1    <dbl> 0.003869390, 0.276066294, 0.000000000, 0.000000000, 0.3…
## $ VOLTINISM_2    <dbl> 16.45469, 15.33245, 16.49462, 16.33996, 20.17041, 15.36…
## $ VOLTINISM_3    <dbl> 20.22226, 16.55243, 20.13115, 19.54410, 18.32589, 18.47…
## $ Channel        <chr> "Channel_1", "Channel_2", "Channel_3", "Channel_4", "Ch…
longer_format_taxa$Channel <- factor(longer_format_taxa$Channel, 
                            levels = c("Channel1", "Channel2", "Channel3", "Channel4",
                                       "Channel5", "Channel6", "Channel7", "Channel8",
                                       "Channel9", "Channel10", "Channel11", "Channel12",
                                       "Channel13", "Channel14", "Channel15", "Channel16"),
                            labels = c("Channel_1", "Channel_2", "Channel_3", "Channel_4",
                                       "Channel_5", "Channel_6", "Channel_7", "Channel_8",
                                       "Channel_9", "Channel_10", "Channel_11", "Channel_12",
                                       "Channel_13", "Channel_14", "Channel_15", "Channel_16"))
glimpse(longer_format_taxa)
## Rows: 1,728
## Columns: 7
## $ Time.point <chr> "Week-1", "Week-1", "Week-1", "Week-1", "Week-1", "Week-1",…
## $ Channel    <fct> Channel_1, Channel_1, Channel_1, Channel_1, Channel_1, Chan…
## $ Position   <chr> "Upstream", "Upstream", "Upstream", "Upstream", "Upstream",…
## $ Treatment  <chr> "crayfish + ALAN", "crayfish + ALAN", "crayfish + ALAN", "c…
## $ Taxa       <chr> "Gammarus", "Chironomidae", "Baetidae", "Ephemerellidae", "…
## $ Abundance  <int> 129, 1618, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1,…
## $ Abun_sd    <dbl> 291.0232, 291.0232, 291.0232, 291.0232, 291.0232, 291.0232,…
longer_format_taxa_av <- longer_format_taxa %>%
  transmute(Taxa, Time.point, Treatment, Channel, Position, Abundance = sum(Abundance))
glimpse(longer_format_taxa_av)
## Rows: 1,728
## Columns: 6
## $ Taxa       <chr> "Gammarus", "Chironomidae", "Baetidae", "Ephemerellidae", "…
## $ Time.point <chr> "Week-1", "Week-1", "Week-1", "Week-1", "Week-1", "Week-1",…
## $ Treatment  <chr> "crayfish + ALAN", "crayfish + ALAN", "crayfish + ALAN", "c…
## $ Channel    <fct> Channel_1, Channel_1, Channel_1, Channel_1, Channel_1, Chan…
## $ Position   <chr> "Upstream", "Upstream", "Upstream", "Upstream", "Upstream",…
## $ Abundance  <int> 90258, 90258, 90258, 90258, 90258, 90258, 90258, 90258, 902…
# Gather functional indices and CWM for each traits
FI_CWM <- merge(longer_format_taxa_av, CWM, by = "Channel")
FI_CWM <- merge(FI_CWM, Functional_richness, by = "Channel")
FI_CWM <- merge(FI_CWM, Functional_dispersion, by = "Channel")
FI_CWM <- merge(FI_CWM, Functional_evenness, by = "Channel")
FI_CWM <- merge(FI_CWM, Functional_diversity, by = "Channel")
FI_CWM <- merge(FI_CWM, Functional_redundancy, by = "Channel")
glimpse(FI_CWM)
## Rows: 1,728
## Columns: 55
## $ Channel               <fct> Channel_1, Channel_1, Channel_1, Channel_1, Chan…
## $ Taxa                  <chr> "Gammarus", "Chironomidae", "Baetidae", "Ephemer…
## $ Time.point            <chr> "Week-1", "Week-1", "Week-1", "Week-1", "Week-1"…
## $ Treatment             <chr> "crayfish + ALAN", "crayfish + ALAN", "crayfish …
## $ Position              <chr> "Upstream", "Upstream", "Upstream", "Upstream", …
## $ Abundance             <int> 90258, 90258, 90258, 90258, 90258, 90258, 90258,…
## $ Sample                <fct> Channel_1, Channel_1, Channel_1, Channel_1, Chan…
## $ DISPERSAL_1           <dbl> 13.00621, 13.00621, 13.00621, 13.00621, 13.00621…
## $ DISPERSAL_2           <dbl> 8.699224, 8.699224, 8.699224, 8.699224, 8.699224…
## $ DISPERSAL_3           <dbl> 9.212926, 9.212926, 9.212926, 9.212926, 9.212926…
## $ DISPERSAL_4           <dbl> 9.429021, 9.429021, 9.429021, 9.429021, 9.429021…
## $ FEEDING_1             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FEEDING_2             <dbl> 8.528899, 8.528899, 8.528899, 8.528899, 8.528899…
## $ FEEDING_3             <dbl> 3.139462, 3.139462, 3.139462, 3.139462, 3.139462…
## $ FEEDING_4             <dbl> 16.03635, 16.03635, 16.03635, 16.03635, 16.03635…
## $ FEEDING_5             <dbl> 3.140994, 3.140994, 3.140994, 3.140994, 3.140994…
## $ FEEDING_6             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FEEDING_7             <dbl> 7.301734, 7.301734, 7.301734, 7.301734, 7.301734…
## $ FEEDING_8             <dbl> 2.199936, 2.199936, 2.199936, 2.199936, 2.199936…
## $ LOCOMOTION_1          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ LOCOMOTION_2          <dbl> 0.01547756, 0.01547756, 0.01547756, 0.01547756, …
## $ LOCOMOTION_3          <dbl> 12.97859, 12.97859, 12.97859, 12.97859, 12.97859…
## $ LOCOMOTION_4          <dbl> 14.7971, 14.7971, 14.7971, 14.7971, 14.7971, 14.…
## $ LOCOMOTION_5          <dbl> 4.960587, 4.960587, 4.960587, 4.960587, 4.960587…
## $ LOCOMOTION_6          <dbl> 4.400795, 4.400795, 4.400795, 4.400795, 4.400795…
## $ LOCOMOTION_7          <dbl> 3.194835, 3.194835, 3.194835, 3.194835, 3.194835…
## $ LOCOMOTION_8          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ REPRODUCTION_1        <dbl> 2.615043, 2.615043, 2.615043, 2.615043, 2.615043…
## $ REPRODUCTION_2        <dbl> 0.5503579, 0.5503579, 0.5503579, 0.5503579, 0.55…
## $ REPRODUCTION_3        <dbl> 7.303257, 7.303257, 7.303257, 7.303257, 7.303257…
## $ REPRODUCTION_4        <dbl> 13.19553, 13.19553, 13.19553, 13.19553, 13.19553…
## $ REPRODUCTION_5        <dbl> 12.12544, 12.12544, 12.12544, 12.12544, 12.12544…
## $ REPRODUCTION_6        <dbl> 0.1272455, 0.1272455, 0.1272455, 0.1272455, 0.12…
## $ REPRODUCTION_7        <dbl> 4.430505, 4.430505, 4.430505, 4.430505, 4.430505…
## $ REPRODUCTION_8        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESISTANCE_1          <dbl> 5.837491, 5.837491, 5.837491, 5.837491, 5.837491…
## $ RESISTANCE_2          <dbl> 0.009673474, 0.009673474, 0.009673474, 0.0096734…
## $ RESISTANCE_3          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESISTANCE_4          <dbl> 2.069725, 2.069725, 2.069725, 2.069725, 2.069725…
## $ RESISTANCE_5          <dbl> 32.43049, 32.43049, 32.43049, 32.43049, 32.43049…
## $ RESPIRATION_1         <dbl> 24.05176, 24.05176, 24.05176, 24.05176, 24.05176…
## $ RESPIRATION_2         <dbl> 16.25278, 16.25278, 16.25278, 16.25278, 16.25278…
## $ RESPIRATION_3         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESPIRATION_4         <dbl> 0.04283967, 0.04283967, 0.04283967, 0.04283967, …
## $ RESPIRATION_5         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ VOLTINISM_1           <dbl> 0.00386939, 0.00386939, 0.00386939, 0.00386939, …
## $ VOLTINISM_2           <dbl> 16.45469, 16.45469, 16.45469, 16.45469, 16.45469…
## $ VOLTINISM_3           <dbl> 20.22226, 20.22226, 20.22226, 20.22226, 20.22226…
## $ Functional_richness   <dbl> 0.6870988, 0.6870988, 0.6870988, 0.6870988, 0.68…
## $ Functional_dispersion <dbl> 0.006243023, 0.006243023, 0.006243023, 0.0062430…
## $ Functional_evenness   <dbl> 0.05823722, 0.05823722, 0.05823722, 0.05823722, …
## $ Functional_diversity  <dbl> 0.01124592, 0.01124592, 0.01124592, 0.01124592, …
## $ GS_rich               <dbl> 0.01810696, 0.01810696, 0.01810696, 0.01810696, …
## $ raoQ                  <dbl> 0.01124592, 0.01124592, 0.01124592, 0.01124592, …
## $ fred                  <dbl> 0.006861045, 0.006861045, 0.006861045, 0.0068610…
FI_CWM$Time.point <- factor(FI_CWM$Time.point)
FI_CWM$Treatment <- factor(FI_CWM$Treatment)
FI_CWM$Position <- factor(FI_CWM$Position)
str(FI_CWM)
## 'data.frame':    1728 obs. of  55 variables:
##  $ Channel              : Factor w/ 16 levels "Channel_1","Channel_2",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Taxa                 : chr  "Gammarus" "Chironomidae" "Baetidae" "Ephemerellidae" ...
##  $ Time.point           : Factor w/ 2 levels "Week-1","Week_6": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Treatment            : Factor w/ 4 levels "ALAN","control",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ Position             : Factor w/ 2 levels "Downstream","Upstream": 2 2 2 2 2 2 2 2 2 2 ...
##  $ Abundance            : int  90258 90258 90258 90258 90258 90258 90258 90258 90258 90258 ...
##  $ Sample               : Factor w/ 16 levels "Channel_1","Channel_2",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ DISPERSAL_1          : num  13 13 13 13 13 ...
##  $ DISPERSAL_2          : num  8.7 8.7 8.7 8.7 8.7 ...
##  $ DISPERSAL_3          : num  9.21 9.21 9.21 9.21 9.21 ...
##  $ DISPERSAL_4          : num  9.43 9.43 9.43 9.43 9.43 ...
##  $ FEEDING_1            : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ FEEDING_2            : num  8.53 8.53 8.53 8.53 8.53 ...
##  $ FEEDING_3            : num  3.14 3.14 3.14 3.14 3.14 ...
##  $ FEEDING_4            : num  16 16 16 16 16 ...
##  $ FEEDING_5            : num  3.14 3.14 3.14 3.14 3.14 ...
##  $ FEEDING_6            : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ FEEDING_7            : num  7.3 7.3 7.3 7.3 7.3 ...
##  $ FEEDING_8            : num  2.2 2.2 2.2 2.2 2.2 ...
##  $ LOCOMOTION_1         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ LOCOMOTION_2         : num  0.0155 0.0155 0.0155 0.0155 0.0155 ...
##  $ LOCOMOTION_3         : num  13 13 13 13 13 ...
##  $ LOCOMOTION_4         : num  14.8 14.8 14.8 14.8 14.8 ...
##  $ LOCOMOTION_5         : num  4.96 4.96 4.96 4.96 4.96 ...
##  $ LOCOMOTION_6         : num  4.4 4.4 4.4 4.4 4.4 ...
##  $ LOCOMOTION_7         : num  3.19 3.19 3.19 3.19 3.19 ...
##  $ LOCOMOTION_8         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ REPRODUCTION_1       : num  2.62 2.62 2.62 2.62 2.62 ...
##  $ REPRODUCTION_2       : num  0.55 0.55 0.55 0.55 0.55 ...
##  $ REPRODUCTION_3       : num  7.3 7.3 7.3 7.3 7.3 ...
##  $ REPRODUCTION_4       : num  13.2 13.2 13.2 13.2 13.2 ...
##  $ REPRODUCTION_5       : num  12.1 12.1 12.1 12.1 12.1 ...
##  $ REPRODUCTION_6       : num  0.127 0.127 0.127 0.127 0.127 ...
##  $ REPRODUCTION_7       : num  4.43 4.43 4.43 4.43 4.43 ...
##  $ REPRODUCTION_8       : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RESISTANCE_1         : num  5.84 5.84 5.84 5.84 5.84 ...
##  $ RESISTANCE_2         : num  0.00967 0.00967 0.00967 0.00967 0.00967 ...
##  $ RESISTANCE_3         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RESISTANCE_4         : num  2.07 2.07 2.07 2.07 2.07 ...
##  $ RESISTANCE_5         : num  32.4 32.4 32.4 32.4 32.4 ...
##  $ RESPIRATION_1        : num  24.1 24.1 24.1 24.1 24.1 ...
##  $ RESPIRATION_2        : num  16.3 16.3 16.3 16.3 16.3 ...
##  $ RESPIRATION_3        : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RESPIRATION_4        : num  0.0428 0.0428 0.0428 0.0428 0.0428 ...
##  $ RESPIRATION_5        : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ VOLTINISM_1          : num  0.00387 0.00387 0.00387 0.00387 0.00387 ...
##  $ VOLTINISM_2          : num  16.5 16.5 16.5 16.5 16.5 ...
##  $ VOLTINISM_3          : num  20.2 20.2 20.2 20.2 20.2 ...
##  $ Functional_richness  : num  0.687 0.687 0.687 0.687 0.687 ...
##  $ Functional_dispersion: num  0.00624 0.00624 0.00624 0.00624 0.00624 ...
##  $ Functional_evenness  : num  0.0582 0.0582 0.0582 0.0582 0.0582 ...
##  $ Functional_diversity : num  0.0112 0.0112 0.0112 0.0112 0.0112 ...
##  $ GS_rich              : num  0.0181 0.0181 0.0181 0.0181 0.0181 ...
##  $ raoQ                 : num  0.0112 0.0112 0.0112 0.0112 0.0112 ...
##  $ fred                 : num  0.00686 0.00686 0.00686 0.00686 0.00686 ...
FI_CWM_Trca <- FI_CWM %>%
  pivot_longer(cols = c(DISPERSAL_1, DISPERSAL_2, DISPERSAL_3, DISPERSAL_4, FEEDING_1, FEEDING_2, FEEDING_3, FEEDING_4, FEEDING_5, FEEDING_6, FEEDING_7, FEEDING_8, LOCOMOTION_1, LOCOMOTION_2, LOCOMOTION_3, LOCOMOTION_4, LOCOMOTION_5, LOCOMOTION_6, LOCOMOTION_7, LOCOMOTION_8, RESISTANCE_1, RESISTANCE_2, RESISTANCE_3, RESISTANCE_4, RESISTANCE_5, RESPIRATION_1, RESPIRATION_2,RESPIRATION_3, RESPIRATION_4, RESPIRATION_5, VOLTINISM_1, VOLTINISM_2, VOLTINISM_3, REPRODUCTION_1, REPRODUCTION_2, REPRODUCTION_3, REPRODUCTION_4, REPRODUCTION_5, REPRODUCTION_6, REPRODUCTION_7, REPRODUCTION_8),
               names_to = "Trait", values_to = "Trait_value")
str(FI_CWM_Trca)
## tibble [70,848 × 16] (S3: tbl_df/tbl/data.frame)
##  $ Channel              : Factor w/ 16 levels "Channel_1","Channel_2",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Taxa                 : chr [1:70848] "Gammarus" "Gammarus" "Gammarus" "Gammarus" ...
##  $ Time.point           : Factor w/ 2 levels "Week-1","Week_6": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Treatment            : Factor w/ 4 levels "ALAN","control",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ Position             : Factor w/ 2 levels "Downstream","Upstream": 2 2 2 2 2 2 2 2 2 2 ...
##  $ Abundance            : int [1:70848] 90258 90258 90258 90258 90258 90258 90258 90258 90258 90258 ...
##  $ Sample               : Factor w/ 16 levels "Channel_1","Channel_2",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Functional_richness  : num [1:70848] 0.687 0.687 0.687 0.687 0.687 ...
##  $ Functional_dispersion: num [1:70848] 0.00624 0.00624 0.00624 0.00624 0.00624 ...
##  $ Functional_evenness  : num [1:70848] 0.0582 0.0582 0.0582 0.0582 0.0582 ...
##  $ Functional_diversity : num [1:70848] 0.0112 0.0112 0.0112 0.0112 0.0112 ...
##  $ GS_rich              : num [1:70848] 0.0181 0.0181 0.0181 0.0181 0.0181 ...
##  $ raoQ                 : num [1:70848] 0.0112 0.0112 0.0112 0.0112 0.0112 ...
##  $ fred                 : num [1:70848] 0.00686 0.00686 0.00686 0.00686 0.00686 ...
##  $ Trait                : chr [1:70848] "DISPERSAL_1" "DISPERSAL_2" "DISPERSAL_3" "DISPERSAL_4" ...
##  $ Trait_value          : num [1:70848] 13.01 8.7 9.21 9.43 0 ...

2.6 Linear mixed effects modelling for feeding trait

library(lme4)
library(lmerTest)
## Warning: package 'lmerTest' was built under R version 4.3.1
## 
## Attaching package: 'lmerTest'
## The following object is masked from 'package:lme4':
## 
##     lmer
## The following object is masked from 'package:stats':
## 
##     step
FEEDING_trait <- FI_CWM_Trca[grepl("^FEEDING_", FI_CWM_Trca$Trait), ]
FEEDING_trait$Trait <- as.factor(FEEDING_trait$Trait)

feeding.lmer <- lmer(Trait_value ~  Treatment + Time.point + Position + (1|Channel) + (1|Channel:Trait), FEEDING_trait, control = lmerControl(calc.derivs = FALSE))
summary(feeding.lmer)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Trait_value ~ Treatment + Time.point + Position + (1 | Channel) +  
##     (1 | Channel:Trait)
##    Data: FEEDING_trait
## Control: lmerControl(calc.derivs = FALSE)
## 
## REML criterion at convergence: -320810.1
## 
## Scaled residuals: 
##        Min         1Q     Median         3Q        Max 
## -4.697e-07 -1.758e-07  4.246e-08  2.793e-07  1.116e-06 
## 
## Random effects:
##  Groups        Name        Variance  Std.Dev. 
##  Channel:Trait (Intercept) 3.454e-01 5.877e-01
##  Channel       (Intercept) 2.364e-07 4.862e-04
##  Residual                  3.684e-12 1.919e-06
## Number of obs: 13824, groups:  Channel:Trait, 128; Channel, 16
## 
## Fixed effects:
##                            Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)              -2.252e+00  1.016e-01  4.259e-01  -22.17    0.176    
## Treatmentcontrol          8.335e+00  1.429e-01  5.854e+00   58.30 2.56e-09 ***
## Treatmentcrayfish         6.367e+00  1.429e-01  5.854e+00   44.54 1.23e-08 ***
## Treatmentcrayfish + ALAN  6.846e+00  1.429e-01  5.854e+00   47.89 8.08e-09 ***
## Time.pointWeek_6          2.755e-13  3.265e-08  5.666e+02    0.00    1.000    
## PositionUpstream          2.755e-13  3.265e-08  5.666e+02    0.00    1.000    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Trtmntcn Trtmntcr T+ALAN Tm.W_6
## Trtmntcntrl -0.711                                
## Trtmntcryfs -0.711  0.505                         
## Trtmnt+ALAN -0.711  0.505    0.505                
## Tim.pntWk_6  0.000  0.000    0.000    0.000       
## PostnUpstrm  0.000  0.000    0.000    0.000  0.000

2.6.1 Residual vs fitted value

plot(feeding.lmer, main = "Residuals vs. Fitted Plot for Mixed Effects Model")

2.6.2 Q-Q plot

qqnorm(resid(feeding.lmer))
qqline(resid(feeding.lmer)) 

2.6.3 Plotting model predictions

library(ggeffects)

# Extract the prediction data 
pred.mm <- ggpredict(feeding.lmer, terms = c("Treatment"))  
pred.mm
x predicted std.error conf.low conf.high group
ALAN -2.252229 0.1015893 -2.451358 -2.053101 1
control 6.082397 0.1005695 5.885267 6.279527 1
crayfish 4.114856 0.1005695 3.917727 4.311986 1
crayfish + ALAN 4.594257 0.1005695 4.397127 4.791387 1
# Plot the predictions 

(ggplot(pred.mm) + 
   geom_line(aes(x = x, y = predicted)) +          # slope
   geom_ribbon(aes(x = x, ymin = predicted - std.error, ymax = predicted + std.error), 
               fill = "lightgrey", alpha = 0.5) +  # error band
   geom_point(data = FEEDING_trait,position = position_jitterdodge(jitter.width = 0.3, dodge.width = 0.3), # adding the raw data (scaled values)
              aes(x = Treatment, y = Trait_value, colour = Trait)) + 
   labs(x = "Treatment", y = "Trait value", 
        title = "Trait value across different treatment (Predicted)") + 
   theme_minimal()
)
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?

ggpredict(feeding.lmer, terms = c("Channel", "Trait"), type = "re") %>% 
   plot() +
   labs(x = "Channel", y = "Trait value", title = "Trait value across different channel") + 
   theme_minimal()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

library(broom.mixed)
# Extract coefficents
feeding.lmer_coef <-
    tidy(feeding.lmer, conf.int = TRUE)

# Print coefficents
print(feeding.lmer_coef)
## # A tibble: 9 × 10
##   effect   group   term   estimate std.error statistic      df  p.value conf.low
##   <chr>    <chr>   <chr>     <dbl>     <dbl>     <dbl>   <dbl>    <dbl>    <dbl>
## 1 fixed    <NA>    (Int… -2.25e+ 0   1.02e-1  -2.22e+1   0.426  1.76e-1 -4.52e+1
## 2 fixed    <NA>    Trea…  8.33e+ 0   1.43e-1   5.83e+1   5.85   2.56e-9  7.98e+0
## 3 fixed    <NA>    Trea…  6.37e+ 0   1.43e-1   4.45e+1   5.85   1.23e-8  6.02e+0
## 4 fixed    <NA>    Trea…  6.85e+ 0   1.43e-1   4.79e+1   5.85   8.08e-9  6.49e+0
## 5 fixed    <NA>    Time…  2.75e-13   3.26e-8   8.44e-6 567.     1.00e+0 -6.41e-8
## 6 fixed    <NA>    Posi…  2.75e-13   3.26e-8   8.44e-6 567.     1.00e+0 -6.41e-8
## 7 ran_pars Channe… sd__…  5.88e- 1  NA        NA        NA     NA       NA      
## 8 ran_pars Channel sd__…  4.86e- 4  NA        NA        NA     NA       NA      
## 9 ran_pars Residu… sd__…  1.92e- 6  NA        NA        NA     NA       NA      
## # ℹ 1 more variable: conf.high <dbl>

2.6.4 Plot of the effect size

# Plot results
feeding.lmer_coef %>%
    filter(effect == "fixed" & term != "(Intercept)") %>%
    ggplot(., aes(x = term, y = estimate,
                  ymin = conf.low, ymax = conf.high)) +
    geom_hline(yintercept = 0, color = 'red') + 
    geom_point() +
    geom_linerange() +
    coord_flip() +
    theme_bw() +
    ylab("Coefficient estimate and 95% CI") +
    xlab("Regression coefficient")

sjPlot::plot_model(feeding.lmer, 
                   axis.labels=c("Upstream", "After Treatment (Week6)","Crayfish + ALAN", "Crayfish", "Control"),
                   show.values=TRUE, show.p=TRUE) +
  ggtitle("Effects of ALAN & crayfish on feeding trait of macroinvertebrate") +
  theme(plot.title = element_text(hjust=0.5)) +
  theme_bw()

library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.3.1
ggline(FEEDING_trait, x ="Treatment", y = "Trait_value",
       add = c("mean_se", "jitter"),
       order = c("control", "crayfish", "ALAN", "crayfish + ALAN"),
       error.plot = "errorbar",
       ylab = "Feeding trait", xlab = "Treatment", title = "Mean plot for the effects of ALAN & crayfish on feeding trait")

`

# Add the predictions to the original data
FEEDING_trait_subset <-
    FEEDING_trait %>%
    mutate(lmer_predict = predict(feeding.lmer))

# Plot the predicted values
ggplot(FEEDING_trait_subset,
       aes(x = Abundance, y = Trait_value, color = Trait)) +
  facet_wrap(Time.point~Treatment, nrow=2) + 
    geom_point() +
    geom_line(aes(x = Abundance, y = lmer_predict)) +
    xlab("Abundance") +
    ylab("Predicted trait value") +
    theme_bw()

# Plot the predicted values
ggplot(FEEDING_trait_subset,
       aes(x = Abundance, y = Trait_value, color = Trait)) +
  facet_wrap(Position~Treatment, nrow=2) + 
    geom_point() +
    geom_line(aes(x = Abundance, y = lmer_predict)) +
    xlab("Abundance") +
    ylab("Predicted trait value") +
    theme_bw()

2.6.5 Output of model result

sjPlot:: tab_model(feeding.lmer, show.re.var= TRUE, 
                  pred.labels =c("(Intercept)", "Control", "Crayfish", "Crayfish + ALAN", "After Treatment", "Upstream"),
                  dv.labels= "Effect of ALAN & crayfish on feeding trait of macroinvertebrate")
  Effect of ALAN & crayfish on feeding trait of macroinvertebrate
Predictors Estimates CI p
(Intercept) -2.25 -2.45 – -2.05 <0.001
Control 8.33 8.05 – 8.61 <0.001
Crayfish 6.37 6.09 – 6.65 <0.001
Crayfish + ALAN 6.85 6.57 – 7.13 <0.001
After Treatment 0.00 -0.00 – 0.00 1.000
Upstream 0.00 -0.00 – 0.00 1.000
Random Effects
σ2 0.00
τ00 Channel:Trait 0.35
τ00 Channel 0.00
ICC 1.00
N Channel 16
N Trait 8
Observations 13824
Marginal R2 / Conditional R2 0.967 / 1.000
p1 <- FEEDING_trait_subset %>%                      
  ggplot(aes(x = lmer_predict)) + 
  geom_histogram(bins = 15) +
  facet_wrap(~Treatment)+
  theme_classic()

p2 <- FEEDING_trait_subset %>%                      
  ggplot(aes(sample = lmer_predict)) +          
  geom_qq() + 
  geom_qq_line(colour = "blue") + 
  facet_wrap(~Treatment)+
  theme_classic()

p3 <- FEEDING_trait_subset %>%                     
  ggplot(aes(x = Treatment,             
             y = lmer_predict)) +               
  geom_boxplot(aes(fill = Treatment)) + 
  geom_jitter(alpha = 0.4) +               
  theme(legend.position = "none")+
  theme_bw()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

library(patchwork)                         
## Warning: package 'patchwork' was built under R version 4.3.1
p1 / p2 | p3

2.6.6 Non-parmetric test

FEEDING_trait_subset%>%
  kruskal.test(lmer_predict~Treatment, data = .) %>% 
  tidy()
statistic p.value parameter method
42.15068 0 3 Kruskal-Wallis rank sum test
library(ggstatsplot)
## Warning: package 'ggstatsplot' was built under R version 4.3.1
## You can cite this package as:
##      Patil, I. (2021). Visualizations with statistical details: The 'ggstatsplot' approach.
##      Journal of Open Source Software, 6(61), 3167, doi:10.21105/joss.03167
# plot with statistical results
ggwithinstats( 
  data = FEEDING_trait_subset,
  x = Treatment,
  y = lmer_predict,
  type = "nonparametric",
  pairwise.display = "significant",
  centrality.plotting = TRUE,
  ylab = "Trait value",
 title = "Non-parametric test for treatmentwise comparison (Feeding trait)"
)

2.7 Linear mixed effects modelling for Shredder

feeding.shredder <- lmer(FEEDING_3 ~  Treatment + Time.point + Position + (1|Channel), FI_CWM, control = lmerControl(calc.derivs = FALSE))
summary(feeding.shredder)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: FEEDING_3 ~ Treatment + Time.point + Position + (1 | Channel)
##    Data: FI_CWM
## Control: lmerControl(calc.derivs = FALSE)
## 
## REML criterion at convergence: -41727.2
## 
## Scaled residuals: 
##        Min         1Q     Median         3Q        Max 
## -5.721e-06 -1.535e-06 -1.852e-07  9.811e-07  1.118e-05 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev. 
##  Channel  (Intercept) 1.144e-03 0.0338293
##  Residual             1.440e-12 0.0000012
## Number of obs: 1728, groups:  Channel, 16
## 
## Fixed effects:
##                            Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)               3.045e+00  1.691e-02  3.750e+01 180.042  < 2e-16 ***
## Treatmentcontrol          1.951e-01  2.392e-02  3.728e+01   8.157 8.18e-10 ***
## Treatmentcrayfish         4.641e-01  2.392e-02  3.728e+01  19.400  < 2e-16 ***
## Treatmentcrayfish + ALAN  1.372e-01  2.392e-02  3.728e+01   5.734 1.40e-06 ***
## Time.pointWeek_6         -5.988e-15  5.774e-08  3.753e+01   0.000        1    
## PositionUpstream         -5.988e-15  5.774e-08  3.753e+01   0.000        1    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Trtmntcn Trtmntcr T+ALAN Tm.W_6
## Trtmntcntrl -0.707                                
## Trtmntcryfs -0.707  0.500                         
## Trtmnt+ALAN -0.707  0.500    0.500                
## Tim.pntWk_6  0.000  0.000    0.000    0.000       
## PostnUpstrm  0.000  0.000    0.000    0.000  0.000

2.7.1 Model output

sjPlot:: tab_model(feeding.shredder, show.re.var= TRUE, 
                  pred.labels =c("(Intercept)", "Control", "Crayfish", "Crayfish + ALAN", "After Treatment", "Upstream"),
                  dv.labels= "Effect of ALAN & crayfish on shredder")
  Effect of ALAN & crayfish on shredder
Predictors Estimates CI p
(Intercept) 3.05 3.01 – 3.08 <0.001
Control 0.20 0.15 – 0.24 <0.001
Crayfish 0.46 0.42 – 0.51 <0.001
Crayfish + ALAN 0.14 0.09 – 0.18 <0.001
After Treatment -0.00 -0.00 – 0.00 1.000
Upstream -0.00 -0.00 – 0.00 1.000
Random Effects
σ2 0.00
τ00 Channel 0.00
ICC 1.00
N Channel 16
Observations 1728
Marginal R2 / Conditional R2 0.961 / 1.000

2.7.2 Residual vs fitted value

plot(feeding.shredder, main = "Residuals vs. Fitted Plot for Mixed Effects Model")

2.7.3 Q-Q plot

qqnorm(resid(feeding.shredder))
qqline(resid(feeding.shredder)) 

2.7.4 Plot of the effect size

library(ggplot2)
sjPlot::plot_model(feeding.shredder, 
                   axis.labels=c("Upstream", "After Treatment (Week6)","Crayfish + ALAN", "Crayfish", "Control"),
                   show.values=TRUE, show.p=TRUE) +
  ggtitle("Effects of ALAN & crayfish on shredder") +
  theme(plot.title = element_text(hjust=0.5)) +
  theme_bw()

2.7.5 Plot the results

FI_CWM$shredder.predict<-predict(feeding.shredder)
Predicted.plot <-ggplot()+
  facet_grid(Time.point ~ Position, labeller=label_both)+
  geom_line(data = FI_CWM, aes(x = Treatment, y =shredder.predict))+
  geom_point(data = FI_CWM, aes(x = Treatment, y =FEEDING_3, group=Time.point,colour = Treatment), size=3)+ 
  xlab("Treatment")+ylab("Shredder")+
  ggtitle("Effects of ALAN & crayfish on shredder") +
  theme_bw()+
  theme(panel.grid.major.x  = element_blank(),
  panel.grid.minor.x = element_blank(), legend.position = "none")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
  
Predicted.plot

q1 <- FI_CWM %>%                      
  ggplot(aes(x = shredder.predict)) + 
  geom_histogram(bins = 15) +
  facet_wrap(~Treatment)+
  theme_classic()

q2 <- FI_CWM %>%                      
  ggplot(aes(sample = shredder.predict)) +          
  geom_qq() + 
  geom_qq_line(colour = "blue") + 
  facet_wrap(~Treatment)+
  theme_classic()

q3 <- FI_CWM %>%                     
  ggplot(aes(x = Treatment,             
             y = shredder.predict)) +               
  geom_boxplot(aes(fill = Treatment)) + 
  geom_jitter(alpha = 0.4) +               
  theme(legend.position = "none")+
  theme_bw()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

library(patchwork)                         
q1 / q2 | q3

2.7.6 Non-parametric test

# plot with statistical results
ggwithinstats( 
  data = FI_CWM,
  x = Treatment,
  y = shredder.predict,
  type = "nonparametric",
  pairwise.display = "significant",
  centrality.plotting = TRUE,
  ylab = "Shredder",
 title = "Non-parametric test for treatmentwise comparison (Shredder)"
)

library(ggpubr)
ggline(FI_CWM, x ="Treatment", y = "FEEDING_3",
       add = c("mean_se", "jitter"),
       order = c("control", "crayfish", "ALAN", "crayfish + ALAN"),
       error.plot = "errorbar",
       ylab = "Shredder", xlab = "Treatment", title = "Mean plot for the effects of ALAN & crayfish on shredder")

2.8 Linear mixed effects modelling for functional richness

fr.lmer <- lmer(Functional_richness ~  Treatment + Time.point + Position + (1|Channel), FI_CWM, control = lmerControl(calc.derivs = FALSE))
summary(fr.lmer)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Functional_richness ~ Treatment + Time.point + Position + (1 |  
##     Channel)
##    Data: FI_CWM
## Control: lmerControl(calc.derivs = FALSE)
## 
## REML criterion at convergence: -43831.8
## 
## Scaled residuals: 
##        Min         1Q     Median         3Q        Max 
## -7.736e-06 -2.494e-06 -5.997e-07  1.164e-06  9.859e-06 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev. 
##  Channel  (Intercept) 2.371e-04 1.540e-02
##  Residual             4.253e-13 6.522e-07
## Number of obs: 1728, groups:  Channel, 16
## 
## Fixed effects:
##                            Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)               7.000e-01  7.699e-03  1.426e+01  90.923  < 2e-16 ***
## Treatmentcontrol         -3.166e-01  1.089e-02  1.473e+01 -29.076 2.03e-14 ***
## Treatmentcrayfish        -3.462e-01  1.089e-02  1.473e+01 -31.795 5.55e-15 ***
## Treatmentcrayfish + ALAN -5.048e-02  1.089e-02  1.473e+01  -4.636 0.000338 ***
## Time.pointWeek_6         -1.742e-14  3.138e-08  1.488e+01   0.000 1.000000    
## PositionUpstream         -1.742e-14  3.138e-08  1.488e+01   0.000 1.000000    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Trtmntcn Trtmntcr T+ALAN Tm.W_6
## Trtmntcntrl -0.707                                
## Trtmntcryfs -0.707  0.500                         
## Trtmnt+ALAN -0.707  0.500    0.500                
## Tim.pntWk_6  0.000  0.000    0.000    0.000       
## PostnUpstrm  0.000  0.000    0.000    0.000  0.000

2.8.1 Model output

sjPlot:: tab_model(fr.lmer, show.re.var= TRUE, 
                  pred.labels =c("(Intercept)", "Control", "Crayfish", "Crayfish + ALAN", "After Treatment", "Upstream"),
                  dv.labels= "Effect of ALAN & crayfish on functional richness")
  Effect of ALAN & crayfish on functional richness
Predictors Estimates CI p
(Intercept) 0.70 0.68 – 0.72 <0.001
Control -0.32 -0.34 – -0.30 <0.001
Crayfish -0.35 -0.37 – -0.32 <0.001
Crayfish + ALAN -0.05 -0.07 – -0.03 <0.001
After Treatment -0.00 -0.00 – 0.00 1.000
Upstream -0.00 -0.00 – 0.00 1.000
Random Effects
σ2 0.00
τ00 Channel 0.00
ICC 1.00
N Channel 16
Observations 1728
Marginal R2 / Conditional R2 0.990 / 1.000

2.8.2 Residual vs fitted value

plot(fr.lmer, main = "Residuals vs. Fitted Plot for Mixed Effects Model")

2.8.3 Q-Q plot

qqnorm(resid(fr.lmer))
qqline(resid(fr.lmer)) 

library(ggplot2)
sjPlot::plot_model(fr.lmer, 
                   axis.labels=c("Upstream", "After Treatment (Week6)","Crayfish + ALAN", "Crayfish", "Control"),
                   show.values=TRUE, show.p=TRUE) +
  ggtitle("Effects of ALAN & crayfish on functional richness") +
  theme(plot.title = element_text(hjust=0.5)) +
  theme_bw()

2.8.4 Plot the results

library(sjPlot)
## Warning: package 'sjPlot' was built under R version 4.3.1
FI_CWM$fr.predict<-predict(fr.lmer)
ggplot()+
  facet_grid(Time.point ~ Position, labeller=label_both)+
  geom_line(data = FI_CWM, aes(x = Treatment, y =fr.predict))+
  geom_point(data = FI_CWM, aes(x = Treatment, y =Functional_richness, group=Time.point,colour = Time.point), size=3)+ 
  xlab("Treatment")+ylab("Functional richness")+
  ggtitle("Effects of ALAN & crayfish on functional richness") +
  theme_bw()+
  theme(panel.grid.major.x  = element_blank(),
  panel.grid.minor.x = element_blank(), legend.position = "none")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

r1 <- FI_CWM %>%                      
  ggplot(aes(x = fr.predict)) + 
  geom_histogram(bins = 15) +
  facet_wrap(~Treatment)+
  theme_classic()

r2 <- FI_CWM %>%                      
  ggplot(aes(sample = fr.predict)) +          
  geom_qq() + 
  geom_qq_line(colour = "blue") + 
  facet_wrap(~Treatment)+
  theme_classic()

r3 <- FI_CWM %>%                     
  ggplot(aes(x = Treatment,             
             y = fr.predict)) +               
  geom_boxplot(aes(fill = Treatment)) + 
  geom_jitter(alpha = 0.4) +               
  theme(legend.position = "none")+
  theme_bw()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

library(patchwork)                         
r1 / r2 | r3

2.8.5 Non-parametric test

# plot with statistical results
ggwithinstats( 
  data = FI_CWM,
  x = Treatment,
  y = fr.predict,
  type = "nonparametric",
  pairwise.display = "significant",
  centrality.plotting = TRUE,
  ylab = "Functional richness",
 title = "Non-parametric test for treatmentwise comparison (Functional richness)"
)

library(ggpubr)
ggline(FI_CWM, x ="Treatment", y = "Functional_richness",
       add = c("mean_se", "jitter", error.plot = "pointrange"),
       order = c("control", "crayfish", "ALAN", "crayfish + ALAN"),
       error.plot = "errorbar",
       ylab = "Functional richness", xlab = "Treatment", title = "Mean plot for the effects of ALAN & crayfish on functional richness")

3 Evaluating before and after treatment effect on macroinvertebrates trait

3.1 Restructure our dataset on the basis of time point

# Restructure the longer_format_taxa table by transforming it into a wider format, where each row corresponds to a specific time point.

Final_data1 <- longer_format_taxa %>%
 pivot_wider(names_from = Time.point, values_from = Abundance)
glimpse(Final_data1)
## Rows: 864
## Columns: 7
## $ Channel   <fct> Channel_1, Channel_1, Channel_1, Channel_1, Channel_1, Chann…
## $ Position  <chr> "Upstream", "Upstream", "Upstream", "Upstream", "Upstream", …
## $ Treatment <chr> "crayfish + ALAN", "crayfish + ALAN", "crayfish + ALAN", "cr…
## $ Taxa      <chr> "Gammarus", "Chironomidae", "Baetidae", "Ephemerellidae", "H…
## $ Abun_sd   <dbl> 291.0232, 291.0232, 291.0232, 291.0232, 291.0232, 291.0232, …
## $ `Week-1`  <int> 129, 1618, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, …
## $ Week_6    <int> 138, 603, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
# Omitting NA values in our dataset
Final_data1[is.na(Final_data1)] <- 0
Final_data1[1:6, 1:6]
Channel Position Treatment Taxa Abun_sd Week-1
Channel_1 Upstream crayfish + ALAN Gammarus 291.0232 129
Channel_1 Upstream crayfish + ALAN Chironomidae 291.0232 1618
Channel_1 Upstream crayfish + ALAN Baetidae 291.0232 9
Channel_1 Upstream crayfish + ALAN Ephemerellidae 291.0232 11
Channel_1 Upstream crayfish + ALAN Heptageniidae 291.0232 0
Channel_1 Upstream crayfish + ALAN Leptophlebiidae 291.0232 0
library(dplyr)
# Calculating total abundance of each species for each time point 
total_abundance_by_timepoint <- Final_data1 %>%
  group_by(Taxa) %>%
  summarise(
    Channel = first(Channel),
    Treatment = first(Treatment),
    Position = first(Position),
    Before = sum(`Week-1`),
    After = sum(Week_6)
  )
total_abundance_by_timepoint[1:6, 1:6]
Taxa Channel Treatment Position Before After
Baetidae Channel_1 crayfish + ALAN Upstream 452 704
Caenidae Channel_1 crayfish + ALAN Upstream 0 0
Ceratopogonidae Channel_1 crayfish + ALAN Upstream 59 19
Chironomidae Channel_1 crayfish + ALAN Upstream 32506 46501
Chrysomelidae Channel_1 crayfish + ALAN Upstream 1 0
Culicidae Channel_1 crayfish + ALAN Upstream 1 0
# Calculating row sums for each time point
row_sums1 <- rowSums(total_abundance_by_timepoint[, c(5:6)])

# Subset the dataset to remove rows with zero row sums
Final_data_NZ1 <- total_abundance_by_timepoint[row_sums1 != 0, ]

Final_data_NZ1[1:6, 1:6]
Taxa Channel Treatment Position Before After
Baetidae Channel_1 crayfish + ALAN Upstream 452 704
Ceratopogonidae Channel_1 crayfish + ALAN Upstream 59 19
Chironomidae Channel_1 crayfish + ALAN Upstream 32506 46501
Chrysomelidae Channel_1 crayfish + ALAN Upstream 1 0
Culicidae Channel_1 crayfish + ALAN Upstream 1 0
Dixidae Channel_1 crayfish + ALAN Upstream 1 2
datafortraitgen1 <- Final_data_NZ1[, c(1, 5, 6)]
datafortraitgen1[1:6, 1:3]
Taxa Before After
Baetidae 452 704
Ceratopogonidae 59 19
Chironomidae 32506 46501
Chrysomelidae 1 0
Culicidae 1 0
Dixidae 1 2

3.2 Trait Analysis

# Applying as_biomonitor function to our species abundance data,  
# this function will merge our dataset with the reference taxonomic dataset.
# I select group = "mi" which means that as_biomonitor function will merge our datset
# with the reference macroinvertebrate taxonomic dataset

biomonitor_data1 <- as_biomonitor(datafortraitgen1, group = "mi", traceB = TRUE)
glimpse(biomonitor_data1)
## List of 1
##  $ taxa_db:'data.frame': 23 obs. of  13 variables:
##   ..$ Phylum    : chr [1:23] "Arthropoda" "Arthropoda" "Arthropoda" "Arthropoda" ...
##   ..$ Class     : chr [1:23] "Insecta" "Insecta" "Insecta" "Insecta" ...
##   ..$ Subclass  : chr [1:23] "" "" "" "" ...
##   ..$ Order     : chr [1:23] "Ephemeroptera" "Diptera" "Diptera" "Coleoptera" ...
##   ..$ Family    : chr [1:23] "Baetidae" "Ceratopogonidae" "Chironomidae" "Chrysomelidae" ...
##   ..$ Subfamily : chr [1:23] "" "" "" "" ...
##   ..$ Tribus    : chr [1:23] "" "" "" "" ...
##   ..$ Genus     : chr [1:23] "" "" "" "" ...
##   ..$ Species   : chr [1:23] "" "" "" "" ...
##   ..$ Subspecies: chr [1:23] "" "" "" "" ...
##   ..$ Taxa      : chr [1:23] "Baetidae" "Ceratopogonidae" "Chironomidae" "Chrysomelidae" ...
##   ..$ Before    : int [1:23] 452 59 32506 1 1 1 6 2 137 0 ...
##   ..$ After     : int [1:23] 704 19 46501 0 0 2 4 0 46 5 ...
##  - attr(*, "class")= chr "asb"

3.2.1 Aggregate Taxa

taxa_aggregation1 <- aggregate_taxa(biomonitor_data1)
#glimpse(taxa_aggregation1)

Figure 1: Structure of macroinvertebrate community. For each observation (n = 64) the relative abundance is reported. Observations were ordered using an agglomerative hierarchical clustering with the Ward.D2 method to enhance pattern detection based on community similarity.

plot(taxa_aggregation1)

3.3 Assign Trait

traitscailing_data1 <- assign_traits(taxa_aggregation1, tax_lev = "Family")
glimpse(traitscailing_data1)
## Rows: 70
## Columns: 118
## $ Taxa               <chr> "Baetidae", "Baetidae", "Baetidae", "Baetidae", "Ba…
## $ Taxa_db            <chr> "Family", "Family", "Family", "Family", "Family", "…
## $ Traits_taxlev      <chr> "Acentrella sinaica", "Baetis", "Baetopus tenellus"…
## $ Traits_real        <chr> "Species", "Genus", "Species", "Species", "Genus", …
## $ Taxonomic_distance <int> 4, 3, 4, 4, 3, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 1, 3, …
## $ LONGITUDINAL_1     <dbl> 0.00000000, 0.14285714, 0.00000000, 0.07692308, 0.0…
## $ LONGITUDINAL_2     <dbl> 0.28571429, 0.19047619, 0.00000000, 0.15384615, 0.0…
## $ LONGITUDINAL_3     <dbl> 0.42857143, 0.19047619, 0.14285714, 0.15384615, 0.1…
## $ LONGITUDINAL_4     <dbl> 0.28571429, 0.19047619, 0.42857143, 0.30769231, 0.1…
## $ LONGITUDINAL_5     <dbl> 0.00000000, 0.14285714, 0.42857143, 0.15384615, 0.1…
## $ LONGITUDINAL_6     <dbl> 0.0000000, 0.0952381, 0.0000000, 0.0000000, 0.15789…
## $ LONGITUDINAL_7     <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.0…
## $ LONGITUDINAL_8     <dbl> 0.00000000, 0.04761905, 0.00000000, 0.15384615, 0.2…
## $ TRANSVERSAL_1      <dbl> 1.00000000, 0.44444444, 0.50000000, 0.00000000, 0.0…
## $ TRANSVERSAL_2      <dbl> 0.00000000, 0.33333333, 0.50000000, 0.50000000, 0.2…
## $ TRANSVERSAL_3      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.1666667, 0.28571…
## $ TRANSVERSAL_4      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ TRANSVERSAL_5      <dbl> 0.0000000, 0.1111111, 0.0000000, 0.0000000, 0.28571…
## $ TRANSVERSAL_6      <dbl> 0.0000000, 0.1111111, 0.0000000, 0.3333333, 0.21428…
## $ TRANSVERSAL_7      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ ALTITUDE_1         <dbl> 0.7500000, 0.5000000, 1.0000000, 0.7500000, 0.60000…
## $ ALTITUDE_2         <dbl> 0.2500000, 0.3333333, 0.0000000, 0.2500000, 0.40000…
## $ ALTITUDE_3         <dbl> 0.0000000, 0.1666667, 0.0000000, 0.0000000, 0.00000…
## $ SUBSTRATE_1        <dbl> 1.00000000, 0.25000000, 0.50000000, 0.08333333, 0.0…
## $ SUBSTRATE_2        <dbl> 0.00000000, 0.12500000, 0.33333333, 0.16666667, 0.0…
## $ SUBSTRATE_3        <dbl> 0.00000000, 0.06250000, 0.00000000, 0.08333333, 0.0…
## $ SUBSTRATE_4        <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.0…
## $ SUBSTRATE_5        <dbl> 0.0000000, 0.3125000, 0.1666667, 0.4166667, 0.45454…
## $ SUBSTRATE_6        <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.0…
## $ SUBSTRATE_7        <dbl> 0.00000000, 0.18750000, 0.00000000, 0.08333333, 0.0…
## $ SUBSTRATE_8        <dbl> 0.00000000, 0.06250000, 0.00000000, 0.16666667, 0.1…
## $ SUBSTRATE_9        <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.0…
## $ CURRENT_1          <dbl> 0.0000000, 0.0000000, 0.0000000, 0.2500000, 0.75000…
## $ CURRENT_2          <dbl> 0.0000000, 0.2857143, 0.0000000, 0.5000000, 0.25000…
## $ CURRENT_3          <dbl> 1.0000000, 0.4285714, 0.6666667, 0.2500000, 0.00000…
## $ CURRENT_4          <dbl> 0.0000000, 0.2857143, 0.3333333, 0.0000000, 0.00000…
## $ TEMPERATURE_1      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ TEMPERATURE_2      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.25000…
## $ TEMPERATURE_3      <dbl> 1.0000000, 1.0000000, 1.0000000, 1.0000000, 0.75000…
## $ PH_1               <dbl> 0.00000000, 0.09090909, 0.00000000, 0.00000000, 0.0…
## $ PH_2               <dbl> 0.00000000, 0.09090909, 0.00000000, 0.00000000, 0.1…
## $ PH_3               <dbl> 0.00000000, 0.09090909, 0.00000000, 0.16666667, 0.1…
## $ PH_4               <dbl> 0.0000000, 0.1818182, 0.0000000, 0.1666667, 0.20000…
## $ PH_5               <dbl> 0.0000000, 0.2727273, 0.2500000, 0.1666667, 0.30000…
## $ PH_6               <dbl> 1.0000000, 0.2727273, 0.7500000, 0.5000000, 0.30000…
## $ SALINITY_1         <dbl> 1.00, 0.75, 1.00, 1.00, 0.60, 1.00, 1.00, 0.60, 0.5…
## $ SALINITY_2         <dbl> 0.00, 0.25, 0.00, 0.00, 0.40, 0.00, 0.00, 0.40, 0.5…
## $ SAPROBITY_1        <dbl> 0.2000000, 0.1428571, 0.0000000, 0.0000000, 0.00000…
## $ SAPROBITY_2        <dbl> 0.6000000, 0.2857143, 0.0000000, 0.2000000, 0.00000…
## $ SAPROBITY_3        <dbl> 0.2000000, 0.4285714, 0.7500000, 0.6000000, 0.60000…
## $ SAPROBITY_4        <dbl> 0.0000000, 0.1428571, 0.2500000, 0.2000000, 0.40000…
## $ SAPROBITY_5        <dbl> 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.…
## $ TROPHIC_1          <dbl> 1.0000000, 0.3333333, 0.0000000, 0.4000000, 0.00000…
## $ TROPHIC_2          <dbl> 0.0000000, 0.3333333, 0.6000000, 0.6000000, 0.50000…
## $ TROPHIC_3          <dbl> 0.0000000, 0.3333333, 0.4000000, 0.0000000, 0.50000…
## $ FOOD_1             <dbl> 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.…
## $ FOOD_2             <dbl> 0.2857143, 0.1818182, 0.0000000, 0.4000000, 0.33333…
## $ FOOD_3             <dbl> 0.14285714, 0.18181818, 0.00000000, 0.00000000, 0.1…
## $ FOOD_4             <dbl> 0.42857143, 0.45454545, 0.00000000, 0.60000000, 0.3…
## $ FOOD_5             <dbl> 0.14285714, 0.09090909, 0.00000000, 0.00000000, 0.1…
## $ FOOD_6             <dbl> 0.00000000, 0.09090909, 0.00000000, 0.00000000, 0.0…
## $ FOOD_7             <dbl> 0.00000000, 0.00000000, 0.16666667, 0.00000000, 0.1…
## $ FOOD_8             <dbl> 0.00000000, 0.00000000, 0.83333333, 0.00000000, 0.0…
## $ FOOD_9             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FEEDING_1          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FEEDING_2          <dbl> 0.2500000, 0.2500000, 0.0000000, 0.4000000, 0.42857…
## $ FEEDING_3          <dbl> 0.0000000, 0.0000000, 0.5000000, 0.0000000, 0.14285…
## $ FEEDING_4          <dbl> 0.7500000, 0.7500000, 0.0000000, 0.6000000, 0.42857…
## $ FEEDING_5          <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ FEEDING_6          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FEEDING_7          <dbl> 0.0000000, 0.0000000, 0.5000000, 0.0000000, 0.00000…
## $ FEEDING_8          <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_1       <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_2       <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_3       <dbl> 0.2000000, 0.3750000, 0.7500000, 0.6000000, 0.75000…
## $ LOCOMOTION_4       <dbl> 0.8000000, 0.5000000, 0.2500000, 0.2000000, 0.25000…
## $ LOCOMOTION_5       <dbl> 0.0000000, 0.0000000, 0.0000000, 0.2000000, 0.00000…
## $ LOCOMOTION_6       <dbl> 0.0000000, 0.1250000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_7       <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LOCOMOTION_8       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESPIRATION_1      <dbl> 0.3333333, 0.3333333, 0.3333333, 0.3333333, 0.33333…
## $ RESPIRATION_2      <dbl> 0.6666667, 0.6666667, 0.6666667, 0.6666667, 0.66666…
## $ RESPIRATION_3      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ RESPIRATION_4      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ RESPIRATION_5      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ SIZE_1             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ SIZE_2             <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ SIZE_3             <dbl> 1.0000000, 0.7500000, 1.0000000, 1.0000000, 1.00000…
## $ SIZE_4             <dbl> 0.0000000, 0.2500000, 0.0000000, 0.0000000, 0.00000…
## $ SIZE_5             <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ SIZE_6             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ SIZE_7             <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESISTANCE_1       <dbl> 0.00, 0.50, 0.00, 0.25, 0.00, 1.00, 1.00, 0.25, 0.0…
## $ RESISTANCE_2       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, …
## $ RESISTANCE_3       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESISTANCE_4       <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0…
## $ RESISTANCE_5       <dbl> 1.00, 0.50, 1.00, 0.75, 1.00, 0.00, 0.00, 0.75, 1.0…
## $ DISPERSAL_1        <dbl> 0.3333333, 0.3333333, 0.3750000, 0.2857143, 0.16666…
## $ DISPERSAL_2        <dbl> 0.1666667, 0.2222222, 0.2500000, 0.2857143, 0.33333…
## $ DISPERSAL_3        <dbl> 0.1666667, 0.1111111, 0.1250000, 0.1428571, 0.16666…
## $ DISPERSAL_4        <dbl> 0.3333333, 0.3333333, 0.2500000, 0.2857143, 0.33333…
## $ STAGES_1           <dbl> 0.5000000, 0.5000000, 0.5000000, 0.5000000, 0.50000…
## $ STAGES_2           <dbl> 0.5000000, 0.5000000, 0.5000000, 0.5000000, 0.50000…
## $ STAGES_3           <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ STAGES_4           <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.00000…
## $ LIFESPAN_1         <dbl> 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.0…
## $ LIFESPAN_2         <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0…
## $ VOLTINISM_1        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ VOLTINISM_2        <dbl> 1.0000000, 0.4000000, 1.0000000, 0.0000000, 0.25000…
## $ VOLTINISM_3        <dbl> 0.0000000, 0.6000000, 0.0000000, 1.0000000, 0.75000…
## $ REPRODUCTION_1     <dbl> 0.0, 0.0, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.2, 0…
## $ REPRODUCTION_2     <dbl> 0.00, 0.00, 0.00, 0.00, 0.20, 0.00, 0.00, 0.00, 0.0…
## $ REPRODUCTION_3     <dbl> 0.00, 0.25, 0.00, 1.00, 0.20, 1.00, 1.00, 0.00, 0.0…
## $ REPRODUCTION_4     <dbl> 1.00, 0.75, 1.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.0…
## $ REPRODUCTION_5     <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0…
## $ REPRODUCTION_6     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ REPRODUCTION_7     <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0…
## $ REPRODUCTION_8     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
colnames(traitscailing_data1)
##   [1] "Taxa"               "Taxa_db"            "Traits_taxlev"     
##   [4] "Traits_real"        "Taxonomic_distance" "LONGITUDINAL_1"    
##   [7] "LONGITUDINAL_2"     "LONGITUDINAL_3"     "LONGITUDINAL_4"    
##  [10] "LONGITUDINAL_5"     "LONGITUDINAL_6"     "LONGITUDINAL_7"    
##  [13] "LONGITUDINAL_8"     "TRANSVERSAL_1"      "TRANSVERSAL_2"     
##  [16] "TRANSVERSAL_3"      "TRANSVERSAL_4"      "TRANSVERSAL_5"     
##  [19] "TRANSVERSAL_6"      "TRANSVERSAL_7"      "ALTITUDE_1"        
##  [22] "ALTITUDE_2"         "ALTITUDE_3"         "SUBSTRATE_1"       
##  [25] "SUBSTRATE_2"        "SUBSTRATE_3"        "SUBSTRATE_4"       
##  [28] "SUBSTRATE_5"        "SUBSTRATE_6"        "SUBSTRATE_7"       
##  [31] "SUBSTRATE_8"        "SUBSTRATE_9"        "CURRENT_1"         
##  [34] "CURRENT_2"          "CURRENT_3"          "CURRENT_4"         
##  [37] "TEMPERATURE_1"      "TEMPERATURE_2"      "TEMPERATURE_3"     
##  [40] "PH_1"               "PH_2"               "PH_3"              
##  [43] "PH_4"               "PH_5"               "PH_6"              
##  [46] "SALINITY_1"         "SALINITY_2"         "SAPROBITY_1"       
##  [49] "SAPROBITY_2"        "SAPROBITY_3"        "SAPROBITY_4"       
##  [52] "SAPROBITY_5"        "TROPHIC_1"          "TROPHIC_2"         
##  [55] "TROPHIC_3"          "FOOD_1"             "FOOD_2"            
##  [58] "FOOD_3"             "FOOD_4"             "FOOD_5"            
##  [61] "FOOD_6"             "FOOD_7"             "FOOD_8"            
##  [64] "FOOD_9"             "FEEDING_1"          "FEEDING_2"         
##  [67] "FEEDING_3"          "FEEDING_4"          "FEEDING_5"         
##  [70] "FEEDING_6"          "FEEDING_7"          "FEEDING_8"         
##  [73] "LOCOMOTION_1"       "LOCOMOTION_2"       "LOCOMOTION_3"      
##  [76] "LOCOMOTION_4"       "LOCOMOTION_5"       "LOCOMOTION_6"      
##  [79] "LOCOMOTION_7"       "LOCOMOTION_8"       "RESPIRATION_1"     
##  [82] "RESPIRATION_2"      "RESPIRATION_3"      "RESPIRATION_4"     
##  [85] "RESPIRATION_5"      "SIZE_1"             "SIZE_2"            
##  [88] "SIZE_3"             "SIZE_4"             "SIZE_5"            
##  [91] "SIZE_6"             "SIZE_7"             "RESISTANCE_1"      
##  [94] "RESISTANCE_2"       "RESISTANCE_3"       "RESISTANCE_4"      
##  [97] "RESISTANCE_5"       "DISPERSAL_1"        "DISPERSAL_2"       
## [100] "DISPERSAL_3"        "DISPERSAL_4"        "STAGES_1"          
## [103] "STAGES_2"           "STAGES_3"           "STAGES_4"          
## [106] "LIFESPAN_1"         "LIFESPAN_2"         "VOLTINISM_1"       
## [109] "VOLTINISM_2"        "VOLTINISM_3"        "REPRODUCTION_1"    
## [112] "REPRODUCTION_2"     "REPRODUCTION_3"     "REPRODUCTION_4"    
## [115] "REPRODUCTION_5"     "REPRODUCTION_6"     "REPRODUCTION_7"    
## [118] "REPRODUCTION_8"
traitscailing_data_cwm1 <- traitscailing_data[, c(1, 65:85, 93:101, 108:118)]
glimpse(traitscailing_data_cwm1)
## Rows: 70
## Columns: 42
## $ Taxa           <chr> "Baetidae", "Baetidae", "Baetidae", "Baetidae", "Baetid…
## $ FEEDING_1      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_2      <dbl> 0.2500000, 0.2500000, 0.0000000, 0.4000000, 0.4285714, …
## $ FEEDING_3      <dbl> 0.0000000, 0.0000000, 0.5000000, 0.0000000, 0.1428571, …
## $ FEEDING_4      <dbl> 0.7500000, 0.7500000, 0.0000000, 0.6000000, 0.4285714, …
## $ FEEDING_5      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ FEEDING_6      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_7      <dbl> 0.0000000, 0.0000000, 0.5000000, 0.0000000, 0.0000000, …
## $ FEEDING_8      <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_1   <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_2   <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_3   <dbl> 0.2000000, 0.3750000, 0.7500000, 0.6000000, 0.7500000, …
## $ LOCOMOTION_4   <dbl> 0.8000000, 0.5000000, 0.2500000, 0.2000000, 0.2500000, …
## $ LOCOMOTION_5   <dbl> 0.0000000, 0.0000000, 0.0000000, 0.2000000, 0.0000000, …
## $ LOCOMOTION_6   <dbl> 0.0000000, 0.1250000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_7   <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ LOCOMOTION_8   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESPIRATION_1  <dbl> 0.3333333, 0.3333333, 0.3333333, 0.3333333, 0.3333333, …
## $ RESPIRATION_2  <dbl> 0.6666667, 0.6666667, 0.6666667, 0.6666667, 0.6666667, …
## $ RESPIRATION_3  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ RESPIRATION_4  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ RESPIRATION_5  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_1   <dbl> 0.00, 0.50, 0.00, 0.25, 0.00, 1.00, 1.00, 0.25, 0.00, 0…
## $ RESISTANCE_2   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1…
## $ RESISTANCE_3   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_4   <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0…
## $ RESISTANCE_5   <dbl> 1.00, 0.50, 1.00, 0.75, 1.00, 0.00, 0.00, 0.75, 1.00, 0…
## $ DISPERSAL_1    <dbl> 0.3333333, 0.3333333, 0.3750000, 0.2857143, 0.1666667, …
## $ DISPERSAL_2    <dbl> 0.1666667, 0.2222222, 0.2500000, 0.2857143, 0.3333333, …
## $ DISPERSAL_3    <dbl> 0.1666667, 0.1111111, 0.1250000, 0.1428571, 0.1666667, …
## $ DISPERSAL_4    <dbl> 0.3333333, 0.3333333, 0.2500000, 0.2857143, 0.3333333, …
## $ VOLTINISM_1    <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ VOLTINISM_2    <dbl> 1.0000000, 0.4000000, 1.0000000, 0.0000000, 0.2500000, …
## $ VOLTINISM_3    <dbl> 0.0000000, 0.6000000, 0.0000000, 1.0000000, 0.7500000, …
## $ REPRODUCTION_1 <dbl> 0.0, 0.0, 0.0, 0.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, …
## $ REPRODUCTION_2 <dbl> 0.00, 0.00, 0.00, 0.00, 0.20, 0.00, 0.00, 0.00, 0.00, 0…
## $ REPRODUCTION_3 <dbl> 0.00, 0.25, 0.00, 1.00, 0.20, 1.00, 1.00, 0.00, 0.00, 0…
## $ REPRODUCTION_4 <dbl> 1.00, 0.75, 1.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0…
## $ REPRODUCTION_5 <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0…
## $ REPRODUCTION_6 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ REPRODUCTION_7 <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, …
## $ REPRODUCTION_8 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
traitscailing_data_av1 <- average_traits(traitscailing_data1)
glimpse(traitscailing_data_av1)
## Rows: 21
## Columns: 114
## $ Taxa           <fct> Baetidae, Ceratopogonidae, Chironomidae, Chrysomelidae,…
## $ LONGITUDINAL_1 <dbl> 0.03891597, 0.04545455, 0.14234694, 0.00000000, 0.00000…
## $ LONGITUDINAL_2 <dbl> 0.12609546, 0.09090909, 0.15425170, 0.00000000, 0.00000…
## $ LONGITUDINAL_3 <dbl> 0.19030360, 0.09090909, 0.12250567, 0.00000000, 0.05555…
## $ LONGITUDINAL_4 <dbl> 0.30052604, 0.09090909, 0.12250567, 0.05555556, 0.12698…
## $ LONGITUDINAL_5 <dbl> 0.20235754, 0.08333333, 0.11513605, 0.05555556, 0.05555…
## $ LONGITUDINAL_6 <dbl> 0.03616183, 0.08333333, 0.10323129, 0.05555556, 0.00000…
## $ LONGITUDINAL_7 <dbl> 0.007518797, 0.250000000, 0.048894558, 0.000000000, 0.1…
## $ LONGITUDINAL_8 <dbl> 0.09812076, 0.26515152, 0.19112812, 0.83333333, 0.63492…
## $ TRANSVERSAL_1  <dbl> 0.277777778, 0.000000000, 0.007936508, 0.000000000, 0.0…
## $ TRANSVERSAL_2  <dbl> 0.44965986, 0.30555556, 0.35317460, 0.42857143, 0.08391…
## $ TRANSVERSAL_3  <dbl> 0.09319728, 0.29166667, 0.15476190, 0.19047619, 0.24475…
## $ TRANSVERSAL_4  <dbl> 0.00000000, 0.18055556, 0.08531746, 0.19047619, 0.16783…
## $ TRANSVERSAL_5  <dbl> 0.05668934, 0.05555556, 0.13293651, 0.00000000, 0.33566…
## $ TRANSVERSAL_6  <dbl> 0.12267574, 0.16666667, 0.26587302, 0.19047619, 0.16783…
## $ TRANSVERSAL_7  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ ALTITUDE_1     <dbl> 0.7428571, 0.6666667, 0.4265306, 0.8333333, 1.0000000, …
## $ ALTITUDE_2     <dbl> 0.2047619, 0.3333333, 0.3700680, 0.1666667, 0.0000000, …
## $ ALTITUDE_3     <dbl> 0.05238095, 0.00000000, 0.20340136, 0.00000000, 0.00000…
## $ SUBSTRATE_1    <dbl> 0.2748918, 0.0000000, 0.1729692, 0.0000000, 0.0000000, …
## $ SUBSTRATE_2    <dbl> 0.08928571, 0.06944444, 0.09299720, 0.00000000, 0.00000…
## $ SUBSTRATE_3    <dbl> 0.19096320, 0.16666667, 0.10273109, 0.00000000, 0.00000…
## $ SUBSTRATE_4    <dbl> 0.06536797, 0.06944444, 0.05854342, 0.05555556, 0.00000…
## $ SUBSTRATE_5    <dbl> 0.26910173, 0.16666667, 0.31715686, 0.88888889, 0.55000…
## $ SUBSTRATE_6    <dbl> 0.00000000, 0.12500000, 0.04285714, 0.05555556, 0.10000…
## $ SUBSTRATE_7    <dbl> 0.03869048, 0.23611111, 0.04306723, 0.00000000, 0.00000…
## $ SUBSTRATE_8    <dbl> 0.05871212, 0.00000000, 0.07401961, 0.00000000, 0.35000…
## $ SUBSTRATE_9    <dbl> 0.01298701, 0.16666667, 0.09565826, 0.00000000, 0.00000…
## $ CURRENT_1      <dbl> 0.1785714, 0.6250000, 0.2431973, 0.7500000, 0.8000000, …
## $ CURRENT_2      <dbl> 0.3979592, 0.3750000, 0.2479592, 0.2500000, 0.2000000, …
## $ CURRENT_3      <dbl> 0.3350340, 0.0000000, 0.2408163, 0.0000000, 0.0000000, …
## $ CURRENT_4      <dbl> 0.08843537, 0.00000000, 0.26802721, 0.00000000, 0.00000…
## $ TEMPERATURE_1  <dbl> 0.00000000, 0.00000000, 0.46190476, 0.00000000, 0.12500…
## $ TEMPERATURE_2  <dbl> 0.07142857, 0.33333333, 0.09523810, 0.00000000, 0.12500…
## $ TEMPERATURE_3  <dbl> 0.9285714, 0.6666667, 0.4428571, 1.0000000, 0.7500000, …
## $ PH_1           <dbl> 0.01298701, 0.00000000, 0.11255836, 0.00000000, 0.15476…
## $ PH_2           <dbl> 0.02727273, 0.00000000, 0.15177404, 0.00000000, 0.15476…
## $ PH_3           <dbl> 0.06695527, 0.00000000, 0.17558357, 0.00000000, 0.15476…
## $ PH_4           <dbl> 0.1101010, 0.0000000, 0.1866947, 0.0000000, 0.1547619, …
## $ PH_5           <dbl> 0.2246753, 0.0000000, 0.1866947, 0.0000000, 0.1547619, …
## $ PH_6           <dbl> 0.5580087, 1.0000000, 0.1866947, 1.0000000, 0.2261905, …
## $ SALINITY_1     <dbl> 0.9071429, 0.5500000, 0.7785714, 1.0000000, 0.6000000, …
## $ SALINITY_2     <dbl> 0.09285714, 0.45000000, 0.22142857, 0.00000000, 0.40000…
## $ SAPROBITY_1    <dbl> 0.04897959, NA, 0.17913832, NA, 0.00000000, 0.00000000,…
## $ SAPROBITY_2    <dbl> 0.1836735, NA, 0.3374150, NA, 0.1875000, 0.5000000, 0.3…
## $ SAPROBITY_3    <dbl> 0.4969388, NA, 0.2979592, NA, 0.3750000, 0.2500000, 0.5…
## $ SAPROBITY_4    <dbl> 0.27040816, NA, 0.14263039, NA, 0.25000000, 0.25000000,…
## $ SAPROBITY_5    <dbl> 0.00000000, NA, 0.04285714, NA, 0.18750000, 0.00000000,…
## $ TROPHIC_1      <dbl> 0.2476190, 0.2500000, 0.2833333, 0.0000000, 0.1250000, …
## $ TROPHIC_2      <dbl> 0.4833333, 0.5000000, 0.4055556, 0.0000000, 0.5000000, …
## $ TROPHIC_3      <dbl> 0.2690476, 0.2500000, 0.3111111, 1.0000000, 0.3750000, …
## $ FOOD_1         <dbl> 0.00000000, 0.00000000, 0.01785714, 0.00000000, 0.00000…
## $ FOOD_2         <dbl> 0.26679035, 0.00000000, 0.27207792, 0.00000000, 0.33333…
## $ FOOD_3         <dbl> 0.06225521, 0.20833333, 0.03084416, 0.00000000, 0.00000…
## $ FOOD_4         <dbl> 0.44996908, 0.70833333, 0.31753247, 0.16666667, 0.33333…
## $ FOOD_5         <dbl> 0.04926819, 0.08333333, 0.07954545, 0.83333333, 0.00000…
## $ FOOD_6         <dbl> 0.01298701, 0.00000000, 0.01298701, 0.00000000, 0.00000…
## $ FOOD_7         <dbl> 0.03968254, 0.00000000, 0.19123377, 0.00000000, 0.33333…
## $ FOOD_8         <dbl> 0.11904762, 0.00000000, 0.07792208, 0.00000000, 0.00000…
## $ FOOD_9         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_1      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_2      <dbl> 0.2850340, 0.3333333, 0.1678571, 0.0000000, 0.3666667, …
## $ FEEDING_3      <dbl> 0.09183673, 0.25000000, 0.06428571, 0.91666667, 0.00000…
## $ FEEDING_4      <dbl> 0.55170068, 0.41666667, 0.32142857, 0.08333333, 0.18333…
## $ FEEDING_5      <dbl> 0.0000000, 0.0000000, 0.1178571, 0.0000000, 0.0000000, …
## $ FEEDING_6      <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, …
## $ FEEDING_7      <dbl> 0.07142857, 0.00000000, 0.24285714, 0.00000000, 0.45000…
## $ FEEDING_8      <dbl> 0.00000000, 0.00000000, 0.08571429, 0.00000000, 0.00000…
## $ LOCOMOTION_1   <dbl> 0.00000000, 0.00000000, 0.00000000, 0.03333333, 0.00000…
## $ LOCOMOTION_2   <dbl> 0.0000000, 0.1000000, 0.0000000, 0.0000000, 0.9000000, …
## $ LOCOMOTION_3   <dbl> 0.5964286, 0.0000000, 0.1901927, 0.0000000, 0.1000000, …
## $ LOCOMOTION_4   <dbl> 0.3571429, 0.8000000, 0.3503401, 0.1000000, 0.0000000, …
## $ LOCOMOTION_5   <dbl> 0.02857143, 0.10000000, 0.17715420, 0.43333333, 0.00000…
## $ LOCOMOTION_6   <dbl> 0.01785714, 0.00000000, 0.16128118, 0.00000000, 0.00000…
## $ LOCOMOTION_7   <dbl> 0.0000000, 0.0000000, 0.1210317, 0.4333333, 0.0000000, …
## $ LOCOMOTION_8   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESPIRATION_1  <dbl> 0.33333333, 0.00000000, 0.75000000, 0.21428571, 0.00000…
## $ RESPIRATION_2  <dbl> 0.6666667, 1.0000000, 0.2500000, 0.0000000, 0.0000000, …
## $ RESPIRATION_3  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.1428571, 0.0000000, …
## $ RESPIRATION_4  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.6428571, 1.0000000, …
## $ RESPIRATION_5  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ SIZE_1         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ SIZE_2         <dbl> 0.00000000, 0.50000000, 0.16666667, 0.00000000, 0.12500…
## $ SIZE_3         <dbl> 0.9642857, 0.2000000, 0.5809524, 0.0000000, 0.8750000, …
## $ SIZE_4         <dbl> 0.03571429, 0.30000000, 0.20476190, 1.00000000, 0.00000…
## $ SIZE_5         <dbl> 0.00000000, 0.00000000, 0.04761905, 0.00000000, 0.00000…
## $ SIZE_6         <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ SIZE_7         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_1   <dbl> 0.39285714, 0.12500000, 0.00000000, 0.00000000, 0.42500…
## $ RESISTANCE_2   <dbl> 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, NA, 0.0, 0.0, 0.0, 0…
## $ RESISTANCE_3   <dbl> 0, 0, 0, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RESISTANCE_4   <dbl> 0.00000000, 0.00000000, 0.07142857, 0.00000000, 0.45000…
## $ RESISTANCE_5   <dbl> 0.6071429, 0.8750000, 0.9285714, 0.0000000, 0.1250000, …
## $ DISPERSAL_1    <dbl> 0.2780612, 0.0000000, 0.3503401, 0.0000000, 0.0000000, …
## $ DISPERSAL_2    <dbl> 0.26814059, 0.00000000, 0.18707483, 0.08333333, 0.00000…
## $ DISPERSAL_3    <dbl> 0.1459751, 0.0000000, 0.2755102, 0.0000000, 0.4000000, …
## $ DISPERSAL_4    <dbl> 0.3078231, 1.0000000, 0.1870748, 0.9166667, 0.6000000, …
## $ STAGES_1       <dbl> 0.50000000, 0.00000000, 0.07142857, 0.31313131, 0.14285…
## $ STAGES_2       <dbl> 0.5000000, 0.6000000, 0.4285714, 0.3131313, 0.4285714, …
## $ STAGES_3       <dbl> 0.0000000, 0.4000000, 0.5000000, 0.3131313, 0.4285714, …
## $ STAGES_4       <dbl> 0.00000000, 0.00000000, 0.00000000, 0.06060606, 0.00000…
## $ LIFESPAN_1     <dbl> 1.0000000, 1.0000000, 1.0000000, 0.2500000, 1.0000000, …
## $ LIFESPAN_2     <dbl> 0.00000000, 0.00000000, 0.00000000, 0.75000000, 0.00000…
## $ VOLTINISM_1    <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000…
## $ VOLTINISM_2    <dbl> 0.4714286, 0.6666667, 0.4166667, 1.0000000, 0.5000000, …
## $ VOLTINISM_3    <dbl> 0.52857143, 0.33333333, 0.58333333, 0.00000000, 0.50000…
## $ REPRODUCTION_1 <dbl> 0.08571429, 0.00000000, 0.05714286, 0.00000000, 0.00000…
## $ REPRODUCTION_2 <dbl> 0.02857143, 0.00000000, 0.00000000, 0.00000000, 0.47500…
## $ REPRODUCTION_3 <dbl> 0.4928571, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ REPRODUCTION_4 <dbl> 0.3928571, 1.0000000, 0.3000000, 1.0000000, 0.0000000, …
## $ REPRODUCTION_5 <dbl> 0.0000000, 0.0000000, 0.4714286, 0.0000000, 0.4250000, …
## $ REPRODUCTION_6 <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ REPRODUCTION_7 <dbl> 0.0000000, 0.0000000, 0.1714286, 0.0000000, 0.1000000, …
## $ REPRODUCTION_8 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
# Selecting our desire trait
trait_av1 <- traitscailing_data_av1[, c(1, 61:81, 89:97, 104:114)]
# Ommittig NA values in our dataset
trait_av1[is.na(trait_av1)] <- 0
glimpse(trait_av1)
## Rows: 21
## Columns: 42
## $ Taxa           <fct> Baetidae, Ceratopogonidae, Chironomidae, Chrysomelidae,…
## $ FEEDING_1      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ FEEDING_2      <dbl> 0.2850340, 0.3333333, 0.1678571, 0.0000000, 0.3666667, …
## $ FEEDING_3      <dbl> 0.09183673, 0.25000000, 0.06428571, 0.91666667, 0.00000…
## $ FEEDING_4      <dbl> 0.55170068, 0.41666667, 0.32142857, 0.08333333, 0.18333…
## $ FEEDING_5      <dbl> 0.0000000, 0.0000000, 0.1178571, 0.0000000, 0.0000000, …
## $ FEEDING_6      <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, …
## $ FEEDING_7      <dbl> 0.07142857, 0.00000000, 0.24285714, 0.00000000, 0.45000…
## $ FEEDING_8      <dbl> 0.00000000, 0.00000000, 0.08571429, 0.00000000, 0.00000…
## $ LOCOMOTION_1   <dbl> 0.00000000, 0.00000000, 0.00000000, 0.03333333, 0.00000…
## $ LOCOMOTION_2   <dbl> 0.0000000, 0.1000000, 0.0000000, 0.0000000, 0.9000000, …
## $ LOCOMOTION_3   <dbl> 0.5964286, 0.0000000, 0.1901927, 0.0000000, 0.1000000, …
## $ LOCOMOTION_4   <dbl> 0.3571429, 0.8000000, 0.3503401, 0.1000000, 0.0000000, …
## $ LOCOMOTION_5   <dbl> 0.02857143, 0.10000000, 0.17715420, 0.43333333, 0.00000…
## $ LOCOMOTION_6   <dbl> 0.01785714, 0.00000000, 0.16128118, 0.00000000, 0.00000…
## $ LOCOMOTION_7   <dbl> 0.0000000, 0.0000000, 0.1210317, 0.4333333, 0.0000000, …
## $ LOCOMOTION_8   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESPIRATION_1  <dbl> 0.33333333, 0.00000000, 0.75000000, 0.21428571, 0.00000…
## $ RESPIRATION_2  <dbl> 0.6666667, 1.0000000, 0.2500000, 0.0000000, 0.0000000, …
## $ RESPIRATION_3  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.1428571, 0.0000000, …
## $ RESPIRATION_4  <dbl> 0.0000000, 0.0000000, 0.0000000, 0.6428571, 1.0000000, …
## $ RESPIRATION_5  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_1   <dbl> 0.39285714, 0.12500000, 0.00000000, 0.00000000, 0.42500…
## $ RESISTANCE_2   <dbl> 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, …
## $ RESISTANCE_3   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ RESISTANCE_4   <dbl> 0.00000000, 0.00000000, 0.07142857, 0.00000000, 0.45000…
## $ RESISTANCE_5   <dbl> 0.6071429, 0.8750000, 0.9285714, 0.0000000, 0.1250000, …
## $ DISPERSAL_1    <dbl> 0.2780612, 0.0000000, 0.3503401, 0.0000000, 0.0000000, …
## $ DISPERSAL_2    <dbl> 0.26814059, 0.00000000, 0.18707483, 0.08333333, 0.00000…
## $ DISPERSAL_3    <dbl> 0.1459751, 0.0000000, 0.2755102, 0.0000000, 0.4000000, …
## $ DISPERSAL_4    <dbl> 0.3078231, 1.0000000, 0.1870748, 0.9166667, 0.6000000, …
## $ VOLTINISM_1    <dbl> 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000…
## $ VOLTINISM_2    <dbl> 0.4714286, 0.6666667, 0.4166667, 1.0000000, 0.5000000, …
## $ VOLTINISM_3    <dbl> 0.52857143, 0.33333333, 0.58333333, 0.00000000, 0.50000…
## $ REPRODUCTION_1 <dbl> 0.08571429, 0.00000000, 0.05714286, 0.00000000, 0.00000…
## $ REPRODUCTION_2 <dbl> 0.02857143, 0.00000000, 0.00000000, 0.00000000, 0.47500…
## $ REPRODUCTION_3 <dbl> 0.4928571, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ REPRODUCTION_4 <dbl> 0.3928571, 1.0000000, 0.3000000, 1.0000000, 0.0000000, …
## $ REPRODUCTION_5 <dbl> 0.0000000, 0.0000000, 0.4714286, 0.0000000, 0.4250000, …
## $ REPRODUCTION_6 <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, …
## $ REPRODUCTION_7 <dbl> 0.0000000, 0.0000000, 0.1714286, 0.0000000, 0.1000000, …
## $ REPRODUCTION_8 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…

3.4 Calculating functioanl indices

library(ade4)
Trait_category_nr <- c(8, 8, 5, 5, 4, 3, 8)

3.4.1 Functional dispersion

Functional_dispersion1 <- f_disp(taxa_aggregation1, trait_db = trait_av1,tax_lev = "Taxa", nbdim = 2, type = "F", col_blocks = Trait_category_nr, correction = "cailliez")
Functional_dispersion1 <- as.data.frame(Functional_dispersion1)
Functional_dispersion1$Time.point <- colnames(datafortraitgen1[-1])
glimpse(Functional_dispersion1)
## Rows: 2
## Columns: 2
## $ Functional_dispersion1 <dbl> 0.01617662, 0.01061918
## $ Time.point             <chr> "Before", "After"

3.4.2 Functional diversity

Functional_diversity1 <- f_divs(taxa_aggregation1, trait_db = trait_av1,tax_lev = "Taxa", type = "F", col_blocks = Trait_category_nr, correction = "cailliez")
Functional_diversity1 <- as.data.frame(Functional_diversity1)
Functional_diversity1$Time.point <- colnames(datafortraitgen1[-1])
glimpse(Functional_diversity1)
## Rows: 2
## Columns: 2
## $ Functional_diversity1 <dbl> 0.03144177, 0.01758400
## $ Time.point            <chr> "Before", "After"

3.4.3 Functional redundancy

Functional_redundancy1 <- f_red(taxa_aggregation1, trait_db = trait_av1,tax_lev = "Taxa", type = "F", col_blocks = Trait_category_nr, correction = "cailliez")
Functional_redundancy1 <- as.data.frame(Functional_redundancy1)
Functional_redundancy1$Time.point <- colnames(datafortraitgen1[-1])
glimpse(Functional_redundancy1)
## Rows: 2
## Columns: 4
## $ GS_rich    <dbl> 0.04913426, 0.03319454
## $ raoQ       <dbl> 0.03144177, 0.01758400
## $ fred       <dbl> 0.01769250, 0.01561054
## $ Time.point <chr> "Before", "After"

3.4.4 Functional evenness

Functional_evenness1 <- f_eve(taxa_aggregation1, trait_db = trait_av1,tax_lev = "Taxa", type = "F", nbdim = 2, col_blocks = Trait_category_nr, correction = "cailliez")
Functional_evenness1 <- as.data.frame(Functional_evenness1)
Functional_evenness1$Time.point <- colnames(datafortraitgen1[-1])
glimpse(Functional_evenness1)
## Rows: 2
## Columns: 2
## $ Functional_evenness1 <dbl> 0.3563223, 0.3187933
## $ Time.point           <chr> "Before", "After"

3.4.5 Functional richness

Functional_richness1 <- f_rich(taxa_aggregation1, trait_db = trait_av1,tax_lev = "Taxa", type = "F", nbdim = 2, col_blocks = Trait_category_nr, correction = "cailliez")
Functional_richness1 <- as.data.frame(Functional_richness1)
Functional_richness1$Time.point <- colnames(datafortraitgen1[-1])
glimpse(Functional_richness1)
## Rows: 2
## Columns: 2
## $ Functional_richness1 <dbl> 1.0000000, 0.8158658
## $ Time.point           <chr> "Before", "After"

3.5 Community-Weighted Mean values of traits

CWM1 <- cwm(taxa_aggregation1, trait_db = traitscailing_data_cwm1, tax_lev = "Taxa", trans = log1p, traceB = FALSE)
CWM1 <- as.data.frame(CWM1)
CWM1$Time.point <- colnames(datafortraitgen1[-1])
glimpse(CWM1)
## Rows: 2
## Columns: 43
## $ Sample         <fct> Before, After
## $ DISPERSAL_1    <dbl> 10.75526, 12.50742
## $ DISPERSAL_2    <dbl> 7.350550, 8.505008
## $ DISPERSAL_3    <dbl> 7.395653, 8.631933
## $ DISPERSAL_4    <dbl> 8.568505, 9.439853
## $ FEEDING_1      <dbl> 0, 0
## $ FEEDING_2      <dbl> 7.249809, 8.311846
## $ FEEDING_3      <dbl> 3.277124, 3.148831
## $ FEEDING_4      <dbl> 13.92713, 15.97234
## $ FEEDING_5      <dbl> 2.322405, 2.838420
## $ FEEDING_6      <dbl> 0.000000000, 0.001121321
## $ FEEDING_7      <dbl> 5.679369, 6.833126
## $ FEEDING_8      <dbl> 1.614126, 1.978523
## $ LOCOMOTION_1   <dbl> 0.01742526, 0.01673175
## $ LOCOMOTION_2   <dbl> 0.06217202, 0.04198130
## $ LOCOMOTION_3   <dbl> 10.60270, 13.00018
## $ LOCOMOTION_4   <dbl> 13.39284, 14.46077
## $ LOCOMOTION_5   <dbl> 4.224717, 4.700228
## $ LOCOMOTION_6   <dbl> 3.376530, 3.987585
## $ LOCOMOTION_7   <dbl> 2.393577, 2.876734
## $ LOCOMOTION_8   <dbl> 0, 0
## $ REPRODUCTION_1 <dbl> 2.029213, 2.525787
## $ REPRODUCTION_2 <dbl> 1.1830929, 0.7576553
## $ REPRODUCTION_3 <dbl> 7.244985, 7.723164
## $ REPRODUCTION_4 <dbl> 11.09647, 12.96419
## $ REPRODUCTION_5 <dbl> 9.014692, 10.932258
## $ REPRODUCTION_6 <dbl> 0.09373784, 0.09047987
## $ REPRODUCTION_7 <dbl> 3.407778, 4.090677
## $ REPRODUCTION_8 <dbl> 0, 0
## $ RESISTANCE_1   <dbl> 5.45761, 6.06177
## $ RESISTANCE_2   <dbl> 0.110607523, 0.008025997
## $ RESISTANCE_3   <dbl> 0, 0
## $ RESISTANCE_4   <dbl> 1.886625, 1.931102
## $ RESISTANCE_5   <dbl> 26.56868, 31.08331
## $ RESPIRATION_1  <dbl> 18.72373, 22.40550
## $ RESPIRATION_2  <dbl> 14.50756, 16.26395
## $ RESPIRATION_3  <dbl> 0.06028197, 0.05465705
## $ RESPIRATION_4  <dbl> 0.7783851, 0.3601071
## $ RESPIRATION_5  <dbl> 0, 0
## $ VOLTINISM_1    <dbl> 0.22239540, 0.09864335
## $ VOLTINISM_2    <dbl> 15.38976, 16.41794
## $ VOLTINISM_3    <dbl> 15.76760, 19.27195
## $ Time.point     <chr> "Before", "After"
longer_format_taxa$Time.point <- ifelse(longer_format_taxa$Time.point == "Week-1", "Before",
                         ifelse(longer_format_taxa$Time.point == "Week_6", "After", NA))
glimpse(longer_format_taxa)
## Rows: 1,728
## Columns: 7
## $ Time.point <chr> "Before", "Before", "Before", "Before", "Before", "Before",…
## $ Channel    <fct> Channel_1, Channel_1, Channel_1, Channel_1, Channel_1, Chan…
## $ Position   <chr> "Upstream", "Upstream", "Upstream", "Upstream", "Upstream",…
## $ Treatment  <chr> "crayfish + ALAN", "crayfish + ALAN", "crayfish + ALAN", "c…
## $ Taxa       <chr> "Gammarus", "Chironomidae", "Baetidae", "Ephemerellidae", "…
## $ Abundance  <int> 129, 1618, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1,…
## $ Abun_sd    <dbl> 291.0232, 291.0232, 291.0232, 291.0232, 291.0232, 291.0232,…
longer_format_taxa_av1 <- longer_format_taxa %>%
  group_by(Taxa, Time.point, Treatment, Channel, Position) %>%
  summarise(
    Abundance = sum(Abundance)
    )
## `summarise()` has grouped output by 'Taxa', 'Time.point', 'Treatment',
## 'Channel'. You can override using the `.groups` argument.
glimpse(longer_format_taxa_av1)
## Rows: 1,728
## Columns: 6
## Groups: Taxa, Time.point, Treatment, Channel [864]
## $ Taxa       <chr> "Baetidae", "Baetidae", "Baetidae", "Baetidae", "Baetidae",…
## $ Time.point <chr> "After", "After", "After", "After", "After", "After", "Afte…
## $ Treatment  <chr> "ALAN", "ALAN", "ALAN", "ALAN", "ALAN", "ALAN", "ALAN", "AL…
## $ Channel    <fct> Channel_3, Channel_3, Channel_6, Channel_6, Channel_9, Chan…
## $ Position   <chr> "Downstream", "Upstream", "Downstream", "Upstream", "Downst…
## $ Abundance  <int> 5, 9, 0, 1, 4, 24, 56, 86, 8, 19, 2, 13, 2, 0, 6, 33, 1, 39…
# Gather functional indices and CWM for each traits
FI_CWM1 <- merge(longer_format_taxa_av1, CWM1, by = "Time.point")
FI_CWM1 <- merge(FI_CWM1, Functional_richness1, by = "Time.point")
FI_CWM1 <- merge(FI_CWM1, Functional_dispersion1, by = "Time.point")
FI_CWM1 <- merge(FI_CWM1, Functional_evenness1, by = "Time.point")
FI_CWM1 <- merge(FI_CWM1, Functional_diversity1, by = "Time.point")
FI_CWM1 <- merge(FI_CWM1, Functional_redundancy1, by = "Time.point")
glimpse(FI_CWM1)
## Rows: 1,728
## Columns: 55
## $ Time.point             <chr> "After", "After", "After", "After", "After", "A…
## $ Taxa                   <chr> "Baetidae", "Baetidae", "Baetidae", "Baetidae",…
## $ Treatment              <chr> "ALAN", "ALAN", "ALAN", "ALAN", "ALAN", "ALAN",…
## $ Channel                <fct> Channel_3, Channel_3, Channel_6, Channel_6, Cha…
## $ Position               <chr> "Downstream", "Upstream", "Downstream", "Upstre…
## $ Abundance              <int> 5, 9, 0, 1, 4, 24, 56, 86, 8, 19, 2, 13, 2, 0, …
## $ Sample                 <fct> After, After, After, After, After, After, After…
## $ DISPERSAL_1            <dbl> 12.50742, 12.50742, 12.50742, 12.50742, 12.5074…
## $ DISPERSAL_2            <dbl> 8.505008, 8.505008, 8.505008, 8.505008, 8.50500…
## $ DISPERSAL_3            <dbl> 8.631933, 8.631933, 8.631933, 8.631933, 8.63193…
## $ DISPERSAL_4            <dbl> 9.439853, 9.439853, 9.439853, 9.439853, 9.43985…
## $ FEEDING_1              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ FEEDING_2              <dbl> 8.311846, 8.311846, 8.311846, 8.311846, 8.31184…
## $ FEEDING_3              <dbl> 3.148831, 3.148831, 3.148831, 3.148831, 3.14883…
## $ FEEDING_4              <dbl> 15.97234, 15.97234, 15.97234, 15.97234, 15.9723…
## $ FEEDING_5              <dbl> 2.83842, 2.83842, 2.83842, 2.83842, 2.83842, 2.…
## $ FEEDING_6              <dbl> 0.001121321, 0.001121321, 0.001121321, 0.001121…
## $ FEEDING_7              <dbl> 6.833126, 6.833126, 6.833126, 6.833126, 6.83312…
## $ FEEDING_8              <dbl> 1.978523, 1.978523, 1.978523, 1.978523, 1.97852…
## $ LOCOMOTION_1           <dbl> 0.01673175, 0.01673175, 0.01673175, 0.01673175,…
## $ LOCOMOTION_2           <dbl> 0.0419813, 0.0419813, 0.0419813, 0.0419813, 0.0…
## $ LOCOMOTION_3           <dbl> 13.00018, 13.00018, 13.00018, 13.00018, 13.0001…
## $ LOCOMOTION_4           <dbl> 14.46077, 14.46077, 14.46077, 14.46077, 14.4607…
## $ LOCOMOTION_5           <dbl> 4.700228, 4.700228, 4.700228, 4.700228, 4.70022…
## $ LOCOMOTION_6           <dbl> 3.987585, 3.987585, 3.987585, 3.987585, 3.98758…
## $ LOCOMOTION_7           <dbl> 2.876734, 2.876734, 2.876734, 2.876734, 2.87673…
## $ LOCOMOTION_8           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ REPRODUCTION_1         <dbl> 2.525787, 2.525787, 2.525787, 2.525787, 2.52578…
## $ REPRODUCTION_2         <dbl> 0.7576553, 0.7576553, 0.7576553, 0.7576553, 0.7…
## $ REPRODUCTION_3         <dbl> 7.723164, 7.723164, 7.723164, 7.723164, 7.72316…
## $ REPRODUCTION_4         <dbl> 12.96419, 12.96419, 12.96419, 12.96419, 12.9641…
## $ REPRODUCTION_5         <dbl> 10.93226, 10.93226, 10.93226, 10.93226, 10.9322…
## $ REPRODUCTION_6         <dbl> 0.09047987, 0.09047987, 0.09047987, 0.09047987,…
## $ REPRODUCTION_7         <dbl> 4.090677, 4.090677, 4.090677, 4.090677, 4.09067…
## $ REPRODUCTION_8         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ RESISTANCE_1           <dbl> 6.06177, 6.06177, 6.06177, 6.06177, 6.06177, 6.…
## $ RESISTANCE_2           <dbl> 0.008025997, 0.008025997, 0.008025997, 0.008025…
## $ RESISTANCE_3           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ RESISTANCE_4           <dbl> 1.931102, 1.931102, 1.931102, 1.931102, 1.93110…
## $ RESISTANCE_5           <dbl> 31.08331, 31.08331, 31.08331, 31.08331, 31.0833…
## $ RESPIRATION_1          <dbl> 22.4055, 22.4055, 22.4055, 22.4055, 22.4055, 22…
## $ RESPIRATION_2          <dbl> 16.26395, 16.26395, 16.26395, 16.26395, 16.2639…
## $ RESPIRATION_3          <dbl> 0.05465705, 0.05465705, 0.05465705, 0.05465705,…
## $ RESPIRATION_4          <dbl> 0.3601071, 0.3601071, 0.3601071, 0.3601071, 0.3…
## $ RESPIRATION_5          <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VOLTINISM_1            <dbl> 0.09864335, 0.09864335, 0.09864335, 0.09864335,…
## $ VOLTINISM_2            <dbl> 16.41794, 16.41794, 16.41794, 16.41794, 16.4179…
## $ VOLTINISM_3            <dbl> 19.27195, 19.27195, 19.27195, 19.27195, 19.2719…
## $ Functional_richness1   <dbl> 0.8158658, 0.8158658, 0.8158658, 0.8158658, 0.8…
## $ Functional_dispersion1 <dbl> 0.01061918, 0.01061918, 0.01061918, 0.01061918,…
## $ Functional_evenness1   <dbl> 0.3187933, 0.3187933, 0.3187933, 0.3187933, 0.3…
## $ Functional_diversity1  <dbl> 0.017584, 0.017584, 0.017584, 0.017584, 0.01758…
## $ GS_rich                <dbl> 0.03319454, 0.03319454, 0.03319454, 0.03319454,…
## $ raoQ                   <dbl> 0.017584, 0.017584, 0.017584, 0.017584, 0.01758…
## $ fred                   <dbl> 0.01561054, 0.01561054, 0.01561054, 0.01561054,…
FI_CWM1$Time.point <- factor(FI_CWM1$Time.point)
FI_CWM1$Treatment <- factor(FI_CWM1$Treatment)
FI_CWM1$Position <- factor(FI_CWM1$Position)
str(FI_CWM1)
## 'data.frame':    1728 obs. of  55 variables:
##  $ Time.point            : Factor w/ 2 levels "After","Before": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Taxa                  : chr  "Baetidae" "Baetidae" "Baetidae" "Baetidae" ...
##  $ Treatment             : Factor w/ 4 levels "ALAN","control",..: 1 1 1 1 1 1 1 1 2 2 ...
##  $ Channel               : Factor w/ 16 levels "Channel_1","Channel_2",..: 3 3 6 6 9 9 16 16 4 4 ...
##  $ Position              : Factor w/ 2 levels "Downstream","Upstream": 1 2 1 2 1 2 1 2 1 2 ...
##  $ Abundance             : int  5 9 0 1 4 24 56 86 8 19 ...
##  $ Sample                : Factor w/ 2 levels "Before","After": 2 2 2 2 2 2 2 2 2 2 ...
##  $ DISPERSAL_1           : num  12.5 12.5 12.5 12.5 12.5 ...
##  $ DISPERSAL_2           : num  8.51 8.51 8.51 8.51 8.51 ...
##  $ DISPERSAL_3           : num  8.63 8.63 8.63 8.63 8.63 ...
##  $ DISPERSAL_4           : num  9.44 9.44 9.44 9.44 9.44 ...
##  $ FEEDING_1             : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ FEEDING_2             : num  8.31 8.31 8.31 8.31 8.31 ...
##  $ FEEDING_3             : num  3.15 3.15 3.15 3.15 3.15 ...
##  $ FEEDING_4             : num  16 16 16 16 16 ...
##  $ FEEDING_5             : num  2.84 2.84 2.84 2.84 2.84 ...
##  $ FEEDING_6             : num  0.00112 0.00112 0.00112 0.00112 0.00112 ...
##  $ FEEDING_7             : num  6.83 6.83 6.83 6.83 6.83 ...
##  $ FEEDING_8             : num  1.98 1.98 1.98 1.98 1.98 ...
##  $ LOCOMOTION_1          : num  0.0167 0.0167 0.0167 0.0167 0.0167 ...
##  $ LOCOMOTION_2          : num  0.042 0.042 0.042 0.042 0.042 ...
##  $ LOCOMOTION_3          : num  13 13 13 13 13 ...
##  $ LOCOMOTION_4          : num  14.5 14.5 14.5 14.5 14.5 ...
##  $ LOCOMOTION_5          : num  4.7 4.7 4.7 4.7 4.7 ...
##  $ LOCOMOTION_6          : num  3.99 3.99 3.99 3.99 3.99 ...
##  $ LOCOMOTION_7          : num  2.88 2.88 2.88 2.88 2.88 ...
##  $ LOCOMOTION_8          : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ REPRODUCTION_1        : num  2.53 2.53 2.53 2.53 2.53 ...
##  $ REPRODUCTION_2        : num  0.758 0.758 0.758 0.758 0.758 ...
##  $ REPRODUCTION_3        : num  7.72 7.72 7.72 7.72 7.72 ...
##  $ REPRODUCTION_4        : num  13 13 13 13 13 ...
##  $ REPRODUCTION_5        : num  10.9 10.9 10.9 10.9 10.9 ...
##  $ REPRODUCTION_6        : num  0.0905 0.0905 0.0905 0.0905 0.0905 ...
##  $ REPRODUCTION_7        : num  4.09 4.09 4.09 4.09 4.09 ...
##  $ REPRODUCTION_8        : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RESISTANCE_1          : num  6.06 6.06 6.06 6.06 6.06 ...
##  $ RESISTANCE_2          : num  0.00803 0.00803 0.00803 0.00803 0.00803 ...
##  $ RESISTANCE_3          : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RESISTANCE_4          : num  1.93 1.93 1.93 1.93 1.93 ...
##  $ RESISTANCE_5          : num  31.1 31.1 31.1 31.1 31.1 ...
##  $ RESPIRATION_1         : num  22.4 22.4 22.4 22.4 22.4 ...
##  $ RESPIRATION_2         : num  16.3 16.3 16.3 16.3 16.3 ...
##  $ RESPIRATION_3         : num  0.0547 0.0547 0.0547 0.0547 0.0547 ...
##  $ RESPIRATION_4         : num  0.36 0.36 0.36 0.36 0.36 ...
##  $ RESPIRATION_5         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ VOLTINISM_1           : num  0.0986 0.0986 0.0986 0.0986 0.0986 ...
##  $ VOLTINISM_2           : num  16.4 16.4 16.4 16.4 16.4 ...
##  $ VOLTINISM_3           : num  19.3 19.3 19.3 19.3 19.3 ...
##  $ Functional_richness1  : num  0.816 0.816 0.816 0.816 0.816 ...
##  $ Functional_dispersion1: num  0.0106 0.0106 0.0106 0.0106 0.0106 ...
##  $ Functional_evenness1  : num  0.319 0.319 0.319 0.319 0.319 ...
##  $ Functional_diversity1 : num  0.0176 0.0176 0.0176 0.0176 0.0176 ...
##  $ GS_rich               : num  0.0332 0.0332 0.0332 0.0332 0.0332 ...
##  $ raoQ                  : num  0.0176 0.0176 0.0176 0.0176 0.0176 ...
##  $ fred                  : num  0.0156 0.0156 0.0156 0.0156 0.0156 ...
FI_CWM_Trca1 <- FI_CWM1 %>%
  pivot_longer(cols = c(DISPERSAL_1, DISPERSAL_2, DISPERSAL_3, DISPERSAL_4, FEEDING_1, FEEDING_2, FEEDING_3, FEEDING_4, FEEDING_5, FEEDING_6, FEEDING_7, FEEDING_8, LOCOMOTION_1, LOCOMOTION_2, LOCOMOTION_3, LOCOMOTION_4, LOCOMOTION_5, LOCOMOTION_6, LOCOMOTION_7, LOCOMOTION_8, RESISTANCE_1, RESISTANCE_2, RESISTANCE_3, RESISTANCE_4, RESISTANCE_5, RESPIRATION_1, RESPIRATION_2,RESPIRATION_3, RESPIRATION_4, RESPIRATION_5, VOLTINISM_1, VOLTINISM_2, VOLTINISM_3, REPRODUCTION_1, REPRODUCTION_2, REPRODUCTION_3, REPRODUCTION_4, REPRODUCTION_5, REPRODUCTION_6, REPRODUCTION_7, REPRODUCTION_8),
               names_to = "Trait", values_to = "Trait_value")
str(FI_CWM_Trca1)
## tibble [70,848 × 16] (S3: tbl_df/tbl/data.frame)
##  $ Time.point            : Factor w/ 2 levels "After","Before": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Taxa                  : chr [1:70848] "Baetidae" "Baetidae" "Baetidae" "Baetidae" ...
##  $ Treatment             : Factor w/ 4 levels "ALAN","control",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Channel               : Factor w/ 16 levels "Channel_1","Channel_2",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ Position              : Factor w/ 2 levels "Downstream","Upstream": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Abundance             : int [1:70848] 5 5 5 5 5 5 5 5 5 5 ...
##  $ Sample                : Factor w/ 2 levels "Before","After": 2 2 2 2 2 2 2 2 2 2 ...
##  $ Functional_richness1  : num [1:70848] 0.816 0.816 0.816 0.816 0.816 ...
##  $ Functional_dispersion1: num [1:70848] 0.0106 0.0106 0.0106 0.0106 0.0106 ...
##  $ Functional_evenness1  : num [1:70848] 0.319 0.319 0.319 0.319 0.319 ...
##  $ Functional_diversity1 : num [1:70848] 0.0176 0.0176 0.0176 0.0176 0.0176 ...
##  $ GS_rich               : num [1:70848] 0.0332 0.0332 0.0332 0.0332 0.0332 ...
##  $ raoQ                  : num [1:70848] 0.0176 0.0176 0.0176 0.0176 0.0176 ...
##  $ fred                  : num [1:70848] 0.0156 0.0156 0.0156 0.0156 0.0156 ...
##  $ Trait                 : chr [1:70848] "DISPERSAL_1" "DISPERSAL_2" "DISPERSAL_3" "DISPERSAL_4" ...
##  $ Trait_value           : num [1:70848] 12.51 8.51 8.63 9.44 0 ...

3.6 Linear mixed effects modelling for Shredder (Before and after treatment effect)

feeding.shredderbf <- lmer(FEEDING_3 ~  Treatment + Time.point + Position + (1|Channel), FI_CWM1, control = lmerControl(calc.derivs = FALSE))
summary(feeding.shredderbf)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: FEEDING_3 ~ Treatment + Time.point + Position + (1 | Channel)
##    Data: FI_CWM1
## Control: lmerControl(calc.derivs = FALSE)
## 
## REML criterion at convergence: -101534.4
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -1.4753 -0.3895 -0.2715  0.8144  2.1598 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev. 
##  Channel  (Intercept) 1.416e-33 3.763e-17
##  Residual             1.416e-27 3.763e-14
## Number of obs: 1728, groups:  Channel, 16
## 
## Fixed effects:
##                           Estimate Std. Error        df   t value Pr(>|t|)
## (Intercept)              3.149e+00  2.217e-15 3.948e-13 1.420e+15        1
## Treatmentcontrol         5.060e-14  2.560e-15 3.948e-13 1.976e+01        1
## Treatmentcrayfish        5.060e-14  2.560e-15 3.948e-13 1.976e+01        1
## Treatmentcrayfish + ALAN 5.060e-14  2.560e-15 3.948e-13 1.976e+01        1
## Time.pointBefore         1.283e-01  1.810e-15 3.948e-13 7.087e+13        1
## PositionUpstream         4.530e-14  1.810e-15 3.948e-13 2.502e+01        1
## 
## Correlation of Fixed Effects:
##             (Intr) Trtmntcn Trtmntcr T+ALAN Tm.pnB
## Trtmntcntrl -0.577                                
## Trtmntcryfs -0.577  0.500                         
## Trtmnt+ALAN -0.577  0.500    0.500                
## Time.pntBfr -0.408  0.000    0.000    0.000       
## PostnUpstrm -0.408  0.000    0.000    0.000  0.000

3.6.1 Residual vs fitted value

plot(feeding.shredderbf, main = "Residuals vs. Fitted Plot for Mixed Effects Model")

3.6.2 Q-Q plot

qqnorm(resid(feeding.shredderbf))
qqline(resid(feeding.shredderbf)) 

3.6.3 Plot of the effect size

library(ggplot2)
sjPlot::plot_model(feeding.shredderbf, 
                   axis.labels=c("Upstream", "Before","Crayfish + ALAN", "Crayfish", "Control"),
                   show.values=TRUE, show.p=TRUE) +
  ggtitle("Effects of ALAN & crayfish on shredder (Before-after treatment effect)") +
  theme(plot.title = element_text(hjust=0.5)) +
  theme_bw()

3.6.4 Plot the results

FI_CWM1$shredder.predictbf<-predict(feeding.shredderbf)
ggplot()+
  facet_grid(~ Position)+
  geom_line(data = FI_CWM1, aes(x = Treatment, y =shredder.predictbf))+
  geom_point(data = FI_CWM1, aes(x = Treatment, y =FEEDING_3, colour = Treatment), size=3)+ 
  xlab("Treatment")+ylab("Shredder")+
  ggtitle("Effects of ALAN & crayfish on shredder(Before-after treatment effect)") +
  theme_bw()+
  theme(panel.grid.major.x  = element_blank(),
  panel.grid.minor.x = element_blank(), legend.position = "none")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

4 PCOA

4.1 Effect of crayfish and ALAN on macroinvertebrate community

4.1.1 Square root transformation of abundance data

library(vegan)
com.matrix <- benthos_data[,5:31]
com.matrix <- sqrt(com.matrix)

4.1.2 Bray-Curtis distances between samples

com.dist<- vegdist(com.matrix, method='bray')
set.seed(98) 
com.trea <-adonis2(com.dist~as.factor(benthos_data$Treatment), data=benthos_data, permutations=9999)
com.trea
Df SumOfSqs R2 F Pr(>F)
as.factor(benthos_data$Treatment) 3 0.1254441 0.0298279 0.6149 0.7825
Residual 60 4.0801474 0.9701721 NA NA
Total 63 4.2055916 1.0000000 NA NA

4.1.3 Calculate multivariate dispersion

dispersion<-betadisper(com.dist, group=benthos_data$Treatment)
dispersion
## 
##  Homogeneity of multivariate dispersions
## 
## Call: betadisper(d = com.dist, group = benthos_data$Treatment)
## 
## No. of Positive Eigenvalues: 27
## No. of Negative Eigenvalues: 36
## 
## Average distance to median:
##            ALAN         control        crayfish crayfish + ALAN 
##          0.2708          0.2000          0.2376          0.2437 
## 
## Eigenvalues for PCoA axes:
## (Showing 8 of 63 eigenvalues)
##  PCoA1  PCoA2  PCoA3  PCoA4  PCoA5  PCoA6  PCoA7  PCoA8 
## 2.0046 1.0107 0.8505 0.3437 0.1846 0.1423 0.1104 0.1063
permutest(dispersion)
## 
## Permutation test for homogeneity of multivariate dispersions
## Permutation: free
## Number of permutations: 999
## 
## Response: Distances
##           Df  Sum Sq   Mean Sq      F N.Perm Pr(>F)
## Groups     3 0.04085 0.0136154 1.7304    999  0.148
## Residuals 60 0.47209 0.0078682
anova(dispersion)
Df Sum Sq Mean Sq F value Pr(>F)
Groups 3 0.0408462 0.0136154 1.730435 0.1703524
Residuals 60 0.4720914 0.0078682 NA NA

4.1.4 Visualizing the multivariate homogeneity of group dispersion

plot(dispersion, hull=TRUE, ellipse=TRUE) ##sd ellipse

# extract the centroids and the site points in multivariate space.  
centroids<-data.frame(grps=rownames(dispersion$centroids),data.frame(dispersion$centroids))
vectors<-data.frame(group=dispersion$group,data.frame(dispersion$vectors))

# to create the lines from the centroids to each point.
seg.data<-cbind(vectors[,1:3],centroids[rep(1:nrow(centroids),as.data.frame(table(vectors$group))$Freq),2:3])
names(seg.data)<-c("group","v.PCoA1","v.PCoA2","PCoA1","PCoA2")

# create the convex hulls of the outermost points.
grp1.hull<-seg.data[seg.data$group=="control",1:4][chull(seg.data[seg.data$group=="control",2:3]),]
grp2.hull<-seg.data[seg.data$group=="crayfish",1:4][chull(seg.data[seg.data$group=="crayfish",2:3]),]
grp3.hull<-seg.data[seg.data$group=="ALAN",1:4][chull(seg.data[seg.data$group=="ALAN",2:3]),]
grp4.hull<-seg.data[seg.data$group=="crayfish + ALAN",1:4][chull(seg.data[seg.data$group=="crayfish + ALAN",2:3]),]
all.hull<-rbind(grp1.hull,grp2.hull,grp3.hull, grp4.hull)
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(grid)

control <- seg.data%>%
  filter(group == "control")

panel.a<-ggplot() + 
  geom_point(data=centroids[2,1:3], aes(x=PCoA1,y=PCoA2),size=4,colour="red",shape=16) + 
  geom_point(data=control, aes(x=v.PCoA1,y=v.PCoA2),size=2,shape=16) +
  labs(title="Control",x="",y="") +
  coord_cartesian(xlim = c(-0.5,0.5), ylim = c(-0.3,0.3)) +
  theme_classic() + 
  theme(legend.position="none")

crayfish <- seg.data%>%
  filter(group == "crayfish")

panel.b<-ggplot() + 
  geom_point(data=centroids[3,1:3], aes(x=PCoA1,y=PCoA2),size=4,colour="green",shape=17) + 
  geom_point(data=crayfish, aes(x=v.PCoA1,y=v.PCoA2),size=2,shape=17) +
  labs(title="Crayfish",x="",y="") +
  coord_cartesian(xlim = c(-0.5,0.5), ylim = c(-0.3,0.3)) +
  theme_classic() + 
  theme(legend.position="none")

ALAN <- seg.data%>%
  filter(group == "ALAN")

panel.c<-ggplot() + 
  geom_point(data=centroids[1,1:3], aes(x=PCoA1,y=PCoA2),size=4,colour="yellow",shape=15) + 
  geom_point(data=ALAN, aes(x=v.PCoA1,y=v.PCoA2),size=2,shape=15) +
  labs(title="ALAN",x="",y="") +
  coord_cartesian(xlim = c(-0.5,0.5), ylim = c(-0.3,0.3)) +
  theme_classic() + 
  theme(legend.position="none")

crayfish_ALAN <- seg.data%>%
  filter(group == "crayfish + ALAN")

panel.d<-ggplot() + 
  geom_point(data=centroids[4,1:3], aes(x=PCoA1,y=PCoA2),size=4,colour="blue",shape=19) + 
  geom_point(data=crayfish_ALAN, aes(x=v.PCoA1,y=v.PCoA2),size=2,shape=15) +
  labs(title="Crayfish + ALAN",x="",y="") +
  coord_cartesian(xlim = c(-0.5,0.5), ylim = c(-0.3,0.3)) +
  theme_classic() + 
  theme(legend.position="none")


panel.e<-ggplot() + 
  geom_point(data=centroids[,1:3], aes(x=PCoA1,y=PCoA2,shape=grps),size=4,colour="red") + 
  geom_point(data=seg.data, aes(x=v.PCoA1,y=v.PCoA2,shape=group),size=2) +
  labs(title="All Treatment",x="",y="") +
  coord_cartesian(xlim = c(-0.5,0.5), ylim = c(-0.3,0.3)) +
  theme_classic() + 
  theme(legend.position="none")

grid.arrange(panel.a,panel.b,panel.c,panel.d,panel.e, nrow=2)

5 NMDS

5.1 Effect of crayfish and ALAN on macroinvertebrate community

comMDS<-metaMDS(com.matrix, distance="bray", k=2, trymax=35, autotransform=TRUE) ##k is the number of dimensions
## Square root transformation
## Wisconsin double standardization
## Run 0 stress 0.1740231 
## Run 1 stress 0.1783888 
## Run 2 stress 0.1740226 
## ... New best solution
## ... Procrustes: rmse 0.001204921  max resid 0.007322045 
## ... Similar to previous best
## Run 3 stress 0.1786708 
## Run 4 stress 0.1740225 
## ... New best solution
## ... Procrustes: rmse 7.356331e-05  max resid 0.0005064544 
## ... Similar to previous best
## Run 5 stress 0.1736827 
## ... New best solution
## ... Procrustes: rmse 0.007610968  max resid 0.05620858 
## Run 6 stress 0.1736828 
## ... Procrustes: rmse 9.087225e-05  max resid 0.000637162 
## ... Similar to previous best
## Run 7 stress 0.1740226 
## ... Procrustes: rmse 0.007631241  max resid 0.05653714 
## Run 8 stress 0.1807929 
## Run 9 stress 0.2054751 
## Run 10 stress 0.1736763 
## ... New best solution
## ... Procrustes: rmse 0.001154345  max resid 0.007025112 
## ... Similar to previous best
## Run 11 stress 0.1740225 
## ... Procrustes: rmse 0.007718918  max resid 0.05639651 
## Run 12 stress 0.2052005 
## Run 13 stress 0.1740225 
## ... Procrustes: rmse 0.007718349  max resid 0.05639515 
## Run 14 stress 0.1808921 
## Run 15 stress 0.1740231 
## ... Procrustes: rmse 0.007577805  max resid 0.05620486 
## Run 16 stress 0.1740226 
## ... Procrustes: rmse 0.00774276  max resid 0.05651037 
## Run 17 stress 0.2265877 
## Run 18 stress 0.1783888 
## Run 19 stress 0.1736762 
## ... New best solution
## ... Procrustes: rmse 0.0001029145  max resid 0.0007273468 
## ... Similar to previous best
## Run 20 stress 0.1736762 
## ... New best solution
## ... Procrustes: rmse 4.259333e-05  max resid 0.0002570489 
## ... Similar to previous best
## *** Best solution repeated 1 times
comMDS
## 
## Call:
## metaMDS(comm = com.matrix, distance = "bray", k = 2, trymax = 35,      autotransform = TRUE) 
## 
## global Multidimensional Scaling using monoMDS
## 
## Data:     wisconsin(sqrt(com.matrix)) 
## Distance: bray 
## 
## Dimensions: 2 
## Stress:     0.1736762 
## Stress type 1, weak ties
## Best solution was repeated 1 time in 20 tries
## The best solution was from try 20 (random start)
## Scaling: centring, PC rotation, halfchange scaling 
## Species: expanded scores based on 'wisconsin(sqrt(com.matrix))'
stressplot(comMDS)

NMDS1<-comMDS$points[,1]
NMDS2<-comMDS$points[,2]
nmds.plot<- cbind(benthos_data,NMDS1, NMDS2)
fit<-envfit(comMDS, com.matrix)
fit
## 
## ***VECTORS
## 
##                      NMDS1    NMDS2     r2 Pr(>r)    
## Gammarus          -0.35898 -0.93334 0.4844  0.001 ***
## Chironomidae      -0.58819 -0.80873 0.0519  0.190    
## Baetidae          -0.43471 -0.90057 0.4324  0.001 ***
## Ephemerellidae    -0.31177 -0.95016 0.6357  0.001 ***
## Heptageniidae     -0.33737 -0.94137 0.2571  0.001 ***
## Leptophlebiidae   -0.10869 -0.99408 0.0762  0.111    
## Caenidae           0.00000  0.00000 0.0000  1.000    
## Hydropsychidae    -0.05208 -0.99864 0.0423  0.257    
## Rhyacophilidae     0.17091 -0.98529 0.0348  0.341    
## Limnephilidae      0.00000  0.00000 0.0000  1.000    
## Philopotamidae     0.00000  0.00000 0.0000  1.000    
## Polycentropodidae  0.00000  0.00000 0.0000  1.000    
## Simuliidae        -0.76611 -0.64271 0.2229  0.001 ***
## Tipulidae         -0.99665 -0.08180 0.0187  0.570    
## Limoniidae        -0.99707 -0.07654 0.2342  0.001 ***
## Dixidae           -0.99320  0.11644 0.0604  0.148    
## Culicidae         -0.99781  0.06611 0.1023  0.021 *  
## Ceratopogonidae   -0.98125  0.19274 0.3769  0.001 ***
## Psychodidae       -0.97423 -0.22554 0.1162  0.020 *  
## Empididae         -0.73541 -0.67762 0.0834  0.070 .  
## Ephydridae        -0.87479  0.48451 0.0540  0.177    
## Pediciidae        -0.82970 -0.55821 0.1663  0.003 ** 
## Elmis             -0.97754  0.21076 0.0514  0.191    
## Limnius           -0.82581 -0.56394 0.0468  0.224    
## Hydraenidae       -0.74298  0.66932 0.1164  0.024 *  
## Chrysomelidae     -0.99781  0.06611 0.1023  0.021 *  
## Oligochaeta       -0.87777  0.47908 0.6667  0.001 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Permutation: free
## Number of permutations: 999
library(ggplot2)
library(ggvegan)
arrows<- data.frame(fit$vector$arrows,R=fit$vectors$r,P=fit$vectors$pvals)
glimpse(arrows)
## Rows: 27
## Columns: 4
## $ NMDS1 <dbl> -0.35898252, -0.58818538, -0.43471188, -0.31177094, -0.33737186,…
## $ NMDS2 <dbl> -0.93334428, -0.80872613, -0.90056959, -0.95015729, -0.94137146,…
## $ R     <dbl> 0.48441463, 0.05191174, 0.43239263, 0.63568233, 0.25705206, 0.07…
## $ P     <dbl> 0.001, 0.190, 0.001, 0.001, 0.001, 0.111, 1.000, 0.257, 0.341, 1…
arrows$Species <- rownames(arrows) 
# filter P less than 0.05
arrows.p<-arrows[arrows$P<0.05,]
glimpse(arrows.p)
## Rows: 13
## Columns: 5
## $ NMDS1   <dbl> -0.3589825, -0.4347119, -0.3117709, -0.3373719, -0.7661095, -0…
## $ NMDS2   <dbl> -0.93334428, -0.90056959, -0.95015729, -0.94137146, -0.6427101…
## $ R       <dbl> 0.4844146, 0.4323926, 0.6356823, 0.2570521, 0.2228614, 0.23423…
## $ P       <dbl> 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.021, 0.001, 0.020,…
## $ Species <chr> "Gammarus", "Baetidae", "Ephemerellidae", "Heptageniidae", "Si…
ggplot(data=nmds.plot, aes(NMDS1, NMDS2))+
  geom_point(data=nmds.plot, aes(NMDS1, NMDS2, color=Treatment),position=position_jitter(.1))+##separates overlapping points
  stat_ellipse(aes(fill=Treatment), alpha=.2,type='t',size =1, geom="polygon")+ ##changes shading on ellipses
  theme_bw()+
  geom_segment(data=arrows.p, aes(x=0, y=0, xend=NMDS1, yend=NMDS2, label=Species), arrow=arrow(length=unit(.2, "cm")*arrows.p$R))+
  ggrepel::geom_text_repel(data = arrows.p, aes(x=NMDS1, y=NMDS2, label = Species), cex = 3, direction = "both", segment.size = 0.25)

ggplot(data=nmds.plot, aes(NMDS1, NMDS2))+
  geom_point(data=nmds.plot, aes(NMDS1, NMDS2, color=Time.point),position=position_jitter(.1))+##separates overlapping points
  stat_ellipse(aes(fill=Time.point), alpha=.2,type='t',size =1, geom="polygon")+ ##changes shading on ellipses
  theme_classic2()+
  geom_segment(data=arrows.p, aes(x=0, y=0, xend=NMDS1, yend=NMDS2, label=Species, lty=Species), arrow=arrow(length=unit(.2, "cm")*arrows.p$R))+
  ggrepel::geom_text_repel(data = arrows.p, aes(x=NMDS1, y=NMDS2, label = Species), cex = 3, direction = "both", segment.size = 0.25)

ggplot(data=nmds.plot, aes(NMDS1, NMDS2))+
  geom_point(data=nmds.plot, aes(NMDS1, NMDS2, color=Position),position=position_jitter(.1))+ ##separates overlapping points
  stat_ellipse(aes(fill=Position), alpha=.2,type='t',size =1, geom="polygon")+  ##changes shading on ellipses
  theme_bw()+
  geom_segment(data=arrows.p, aes(x=0, y=0, xend=NMDS1, yend=NMDS2, label=Species), arrow=arrow(length=unit(.2, "cm")*arrows.p$R))+##add arrows (scaled by R-squared value)
  ggrepel::geom_text_repel(data = arrows.p, aes(x=NMDS1, y=NMDS2, label = Species), cex = 3, direction = "both", segment.size = 0.25)

5.2 For macroinvertebrate feeding trait

library(ggplot2)
library(ggvegan)